<!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="km" lang="km">
<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_km.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='./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="./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>
