<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ta" lang="ta">
<head>
    <meta name="description" content="The official home page of the Apache OpenOffice open source project, home of OpenOffice Writer, Calc, Impress, Draw and Base." />
    <meta name="keywords" content="OpenOffice, Open Office, Apache OpenOffice, Apache Open Office, OpenOffice.org, Calc, Impress, Draw, Base, ODF, Open Document Format, free office editors" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache OpenOffice - The Free and Open Productivity Suite</title>
    <script type="text/javascript" src="/download/globalvars.js"></script>
    <script type="text/javascript" src="./msg_prop_l10n_ta.js"></script>
    <style type="text/css">
    /* <![CDATA[ */
    /*-------------------- Exceptions on standard css -----------------------*/
    @import "/css/home.css";
    @import "/css/styles.css";
    @import "/css/exceptions.css";
    /* ]]> */
    </style>
    <script>
      function follow( platform ) {
        // _gaq.push( ['_trackEvent','social', 'followUs', platform] );

        if ( platform == 'ApacheBlog' ) {
          window.open( "https://blogs.apache.org/OOo/", "_blank" );
        } else if ( platform == 'Facebook' ) {
          window.open( "https://www.facebook.com/ApacheOO", "_blank" );
        } else if ( platform == 'Twitter' ) {
          window.open( "https://twitter.com/ApacheOO", "_blank" );
        } else if ( platform == 'YouTube' ) {
          window.open( "https://www.youtube.com/openoffice", "_blank" );
        }
      }

      function showAlertBox() {
	// The text is defined in "/msg_prop_l10n.js".

	// Show alert box or not?
	if( l10n.index_alert_box_show ) {
		// If no background color value was set then use the default value.
		if( ! l10n.index_alert_box_background_color || l10n.index_alert_box_background_color === "" )
			l10n.index_alert_box_background_color = "#FFD9A7";

		// Show alert box with defined background color.
		// Depending if link is available, make the whole DIV clickable or not.
		if( l10n.index_alert_box_href ) {
			// Show the text with link and cursor as poiner.
			document.write( "<div id='alert_box' style='background: "
			+ l10n.index_alert_box_background_color
			+ "; ' onclick='window.open( \"" + l10n.index_alert_box_href
			+ "\", \"_blank\" ); return false;'>" );

			// Show headline.
			document.write( "<h2 style='cursor: pointer;'>"
			+ l10n.index_alert_box_headline_text + "</h2>" );

			// Show text.
			if( l10n.index_alert_box_text_text ) {
				document.write( "<p style='cursor: pointer;'>"
				+ l10n.index_alert_box_text_text + "</p>" );
			}
		} else {
			// Show the text without link and normal cursor.
			document.write( "<div id='alert_box' style='background: "
			+ l10n.index_alert_box_background_color + "'>" );

			// Show headline.
			document.write( "<h2 style='cursor: default;'>"
			+ l10n.index_alert_box_headline_text + "</h2>" );

			// Show text.
			if( l10n.index_alert_box_text_text ) {
				document.write( "<p style='cursor: default;'>"
				+ l10n.index_alert_box_text_text + "</p>" );
			}
		}
		document.write( "</div>" ); // Alert box
	}
      }
    </script>
</head>

<body>

<!-- The text in the H1 tag is intentionally shown as not displayable, just to please accessibility tools like a
screen reader.
-->
<h1 style="display: none;">Apache OpenOffice</h1>

<div id="actionstatements">

  <script type="text/javascript">
  <!--
  // Show alert box.
  // Change to 'true' if you want to show the text that is defined in the variables above.
  showAlertBox();
  //-->
  </script>

  <ul>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-info">
        <div class="action-text action-link">
          <a href="/why/index.html"><h2>I want to learn more about OpenOffice</h2>
          <p>What is Apache OpenOffice? And why should I use it?</p></a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
  </ul>

  <!-- Show the download link with currently available version number, loaded via JavaScript -->
  <script type="text/javascript">
  <!--
  document.write( "<ul><li>"
    + "<div class='action-download'>"
      + "<div class='action-text action-link'>"
        + "<a href='/ta/download/index.html'>"
          + "<h2>I want to download Apache OpenOffice</h2>"
          + "<p style='font-size: 1.0em; font-weight: bold;'>(Most recent release: " + DL.VERSION + ")</p>"
          + "<p>Download Apache OpenOffice for free <b>(really!)</b> | "
            + "<a href='https://blogs.apache.org/OOo/entry/with_apache_openoffice_you_get'"
              + "title='Blog post: With Apache OpenOffice you get what you do not pay for' target='_blank'>"
              + "Click here to get more information"
            + "</a>."
          + "</p>"
        + "</a>"
      + "</div>"
    + "</div>"
  + "</li></ul>" );
  //-->
  </script>

  <!-- Show the download link, without version number -->
  <noscript>
    <div class="action-download">
      <div class="action-text action-link">
        <a href="/ta/download/index.html">
          <h2>I want to download Apache OpenOffice</h2>
          <p>Download Apache OpenOffice for free, or find out about other ways of getting it.</p>
        </a>
      </div>
    </div>
  </noscript>

  <ul>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-help">
        <div class="action-text action-link">
          <a href="/support/index.html"><h2>I need help with my OpenOffice</h2>
          <p>Help is at hand whenever you need it.</p></a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-extend">
        <div class="action-text action-link">
          <a href="/extensions/index.html"><h2>I want to do more with my OpenOffice</h2>
          <p>Extend Apache OpenOffice with additional functionality, templates and clipart.</p></a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-participate">
        <div class="action-text action-link">
          <a href="https://openoffice.apache.org/get-involved.html"><h2>I want to participate in OpenOffice</h2>
          <p>Apache OpenOffice is made with help from people all over the world. Feel free to contribute!</p></a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
     <div class="action-social">
        <div class="action-text action-link">
          <a href="/social/index.html" onclick="javascript:follow('SocialLink');">
          <h2>I want to stay in touch with OpenOffice</h2>
          <p>Follow the progress of OpenOffice via our announcement list, social media areas and blog.</p></a>
            <div class="action-social-extra">
              <p>
                <span style="padding:0 5px;cursor: pointer;" onclick="javascript:follow('ApacheBlog');"
                title="Blog of OpenOffice"><img src="/images/logo-rss-16.png" alt="Blog of OpenOffice" />
                <a>Official Blog</a></span>
                <span style="padding:0 5px;cursor: pointer;" onclick="javascript:follow('Facebook');"
                title="Follow us on Facebook"><img src="/images/logo-facebook-16.png" alt="Follow us on Facebook" />
                <a>Facebook</a></span>
                <span style="padding:0 5px;cursor: pointer;" onclick="javascript:follow('Twitter');"
                title="Follow us on Twitter"><img src="/images/logo-twitter-16.png" alt="Follow us on Twitter" />
                <a>Twitter</a></span>
                <span style="padding: 0 5px; cursor: pointer;" onclick="javascript:follow( 'YouTube' );"
                title="Subscribe to our YouTube channel"><img src="/images/logo-youtube-16.png" alt="Subscribe to our YouTube channel" />
                <a>YouTube</a>
                </span>
              </p>
            </div>
        </div>
      </div>
     </li>
    <li>
      <hr />
    </li>
  </ul>

<!--
  <div id="SupportedAndSupporters">
    <a href="https://validator.w3.org/check?uri=referer"
    title="W3C Markup Validation Service - Check the markup (HTML, XHTML, ...) of Web documents">
    <img src="https://www.w3.org/Icons/valid-xhtml10-blue.png"
    alt="W3C Markup Validation Service - Check the markup (HTML, XHTML, ...) of Web documents"/></a>
  </div> -->
</div>

<!--
<div id="news">

  <div class="first campaign" style="height: 210px; float: right; overflow: auto;">
    <h2>Recent Blog Posts</h2>

    <p style="text-align:right">
      <a href="https://blogs.apache.org/OOo/">All Posts</a>
    </p>

    <p>
      <em>28 November 2016:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/over_200_million_downloads_of">
      Over 200 million downloads of Apache OpenOffice</a>
      <br />

      <em>12 October 2016:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_12">
      Announcing Apache OpenOffice 4.1.3</a>
      <br />

      <em>28 October 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_11">
      Announcing Apache OpenOffice 4.1.2</a>
      <br />

      <em>27 September 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/coming_soon_apache_openoffice_4">
      Coming soon... Apache OpenOffice 4.1.2</a>
      <br />

      <em>13 May 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/authoring_e_books_in_apache">
      Authoring e-Books in Apache OpenOffice</a>
      <br />

      <em>13 April 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/collaboration_is_in_our_dna">
      Collaboration is in our DNA</a>
      <br />

      <em>31 December 2014:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/apache_openoffice_in_2014_a">
      Apache OpenOffice in 2014: a year in review</a>
      <br />
    </p>
  </div>

  <div id="all_news" style="height: 375px; float: left; overflow: auto;">
    <div class="campaign">
      <h2>Recent News</h2>

      <p style="text-align:right">
        <a href="news/index.html">All News</a>
      </p>
      <p></p>

      <h2>Apache OpenOffice 4.1.3 released</h2>

      <p>
        <em>12 October 2016:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_12"
        title="Offical blog post about Apache OpenOffice 4.1.3">official release of version 4.1.3</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.3+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.3">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.3">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.2 released</h2>

      <p>
        <em>28 October 2015:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_11"
        title="Offical blog post about Apache OpenOffice 4.1.2">official release of version 4.1.2</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.2+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.2">Release Notes</a> you can read about all bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.2">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Udine moves to OpenOffice, will save 360,000 Euro</h2>

      <p>
        <em>16 September 2014:</em>
        The City of Udine, in Italy, announced a process that will lead to the installation
        of OpenOffice on 900 municipal desktops, saving the city 360,000 Euro.
        ZDNet's Raffaele Mastrolonardo has the
        <a href="http://www.zdnet.com/another-italian-city-announces-its-ditching-microsoft-windows-for-open-source-7000033682/">details</a>.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.1 released</h2>

      <p>
        <em>21 August 2014:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_1"
        title="Offical blog post about Apache OpenOffice 4.1.1">official release of version 4.1.1</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.1+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.1">Release Notes</a> you can read about all new features,
        functions and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.1">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.0 released</h2>

      <p>
        <em>29 April 2014:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/the_apache_openoffice_project_announce"
        title="Offical blog post about Apache OpenOffice 4.1.0">official release of version 4.1.0</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.0">Release Notes</a> you can read about all new features,
        functions and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.0">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>100 Million downloads</h2>

      <p>
        <em>17 April 2014:</em>
        The Apache OpenOffice project is proud to tell you that our software was
        <a href="https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces56"
        title="Apache OpenOffice was downloaded 100 million times">downloaded over 100 million times</a>. Join us in
        celebrating this big achievement!
      </p>
    </div>

    <div class="campaign">
      <h2>Italian region adopts OpenOffice, saves 2 Million Euro</h2>

      <p>
        <em>10 October 2013:</em>
        The Italian administrative region of Emilia-Romagna announced plans to move to OpenOffice,
        <a href="https://joinup.ec.europa.eu/community/osor/news/openoffice-italian-emilia-romagna-save-2-million">
        saving 2 million euro</a>.
      </p>
    </div>

    <div class="campaign">
      <h2>Volunteers, not Amateurs</h2>

      <p>
        <em>8 January 2013:</em>
        Apache OpenOffice is developed 100% by volunteers.  Apache does not pay for developers, for translators, for QA,
        for marketing, for UI, for support, etc. Of course, we're happy to accept
        <a href="https://www.apache.org/foundation/contributing.html">donations to the Apache Software Foundation</a>, to
        keep our servers runnings and for similar overhead expenses. But our products are developed entirely by
        volunteers.
      </p>
      <p>Some users are initially worried by this statement:<br /><strong>How can software for free, developed by
	volunteers, be any good?<br /></strong><a href="/why/why_volunteers.html">Read on for an answer...</a>
      </p>
    </div>

  </div>

</div>
-->

<!-- Every new element and text that is defined below the previous DIV will be actually displayed wrapped below this DIV
(because of "clear: both" instead of floated around the previous DIVs. This is really needed. -->

<div style="clear: both;"></div>

</body>
</html>
