<!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="am" lang="am">
<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_am.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 pointer.
			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='/am/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="/am/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="Official 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="Official 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="Official 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="Official 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>
