<!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">
<head itemscope itemtype="http://schema.org/Article">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta itemprop="name" content="Jaitsi Apache OpenOffice" />
  <meta itemprop="description" content="Join the OpenOffice revolution, the free office productivity suite with over 330 million trusted downloads." />
  <meta itemprop="image" content="https://www.openoffice.org/images/AOO_logos/AOO-Logo-Download.png" />
  <meta property="og:title" content="Jaitsi Apache OpenOffice" />
  <meta property="og:description" content="Join the OpenOffice revolution, the free office productivity suite with over 330 million trusted downloads." />
  <meta property="og:image" content="https://www.openoffice.org/images/AOO_logos/AOO-Logo-Download.png" />
  <meta name="description" content="Official Apache OpenOffice download page. Join the OpenOffice revolution, the free office productivity suite with over 330 million trusted downloads." />
  <title>Apache OpenOffice Downloads - Official Site</title>
  <script type="text/javascript" src="/download/globalvars.js"></script>
  <script type="text/javascript" src="/download/msg_prop_l10n_en.js"></script>
  <script type="text/javascript" src="./msg_prop_l10n_eu.js"></script>
  <script type="text/javascript" src="/download/languages.js"></script>
  <script type="text/javascript" src="/download/release_matrix.js"></script>
  <script type="text/javascript" src="/download/boxed_download.js"></script>
  <script type="text/javascript" src="/download/download.js"></script>
  <style type="text/css">
  /* <![CDATA[ */
  /*-------------------- Exceptions on standard css -----------------------*/
  @import "/download/styles.css";
  @import "/download/exceptions.css";
  /* ]]> */
  </style>
  <script>
    if ( window.document.referrer.indexOf( "shell.windows.com" ) != -1 ) {
       location.href = "/why/why_odf.html";
    }

    function share( platform ) {
      // _gaq.push( ['_trackEvent', 'social', 'shareDownload', platform] ); 

      if ( platform == 'apacheblog' ) {
        window.open( 'https://blogs.apache.org/OOo/', '_blank' );
      } else if ( platform == 'facebook' ) {
        window.open( 'https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.openoffice.org%2Fdownload%2F', '_blank', 'toolbar=0, status=0, width=580, height=325' );
      } else if ( platform == 'twitter' ) {
        window.open( 'https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.openoffice.org%2Feu%2Fdownload%2F&text=Join+the+OpenOffice+revolution%2C+the+free+office+productivity+suite+with+over+330+ million+trusted+downloads.', '_blank', 'toolbar=0, status=0, width=580, height=325' );
      }
    }
  </script>
</head>

<body>

<div class="overall_optionset">

  <div class="optionset">

    <!-- Text above the first colored box -->
    <script type="text/javascript">
    <!--
    // The text in the H1 tag is intentionally shown as "display: none" (do not display).
    // This is to please accessibility tools like a screen reader.
    document.write( "<h1 style='display: none;'>" + l10n.dl_headline_text + "</h1>" );
    //-->
    </script>

    <!-- Green: Stable release -->
    <!-- Download via select boxes -->
    <script type="text/javascript">
    <!--

    // Set a specific language ISO code to force to assemble a certain localized build as download link.
    // Changed: The variable can now be found in the "msg_prop_l10n_<ISO_code>.js".

    // Get the download box from a separate file.
    DL.createDownloadBox();

    // Fill the select boxes and wait for the user's choice.
    DL.init( 1 );

    // entourage.initialize();

    //-->
    </script>

    <!-- Green: Stable release: No JavaScript enabled -->
    <noscript>
    <div class="first button green-sel" id="optionitem2">
      <div class="green-sel-icon"></div>
      <h2>
        <a style="cursor: pointer;" href="https://sourceforge.net/projects/openofficeorg.mirror/files/"
          title="Select from all platforms, languages, language packs to download">
          Apache OpenOffice Downloads - Official Site
        </a>
      </h2>
      <p>
        <a style="cursor: pointer;" href="https://sourceforge.net/projects/openofficeorg.mirror/files/"
          title="Select from all platforms, languages and language packs to download">The browser seems to have JavaScript
          disabled. This technique is used for showing the actual download link. If you want to download Apache
          OpenOffice anyway, click this text to choose from the alternative download webpage. You will have to navigate to
          the <em>version</em>/binaries/<em>language</em> subfolder and download the file named
          Apache_OpenOffice_<em>version</em>_<em>os</em>_<em>platform</em>_<em>package</em>_<em>language</em>.<em>ext</em>.
          Our apologies for the inconvenience.
        </a>
      </p>
    </div>
    </noscript>

    <!-- Light Blue: Share download with social networks -->
    <script type="text/javascript">
    <!--
    // Get the share box from a separate file.
    DL.createShareBox();
    //-->
    </script>

    <!-- Blue: Extensions -->
    <script type="text/javascript">
    <!--
    // Get the extensions box from a separate file.
    DL.createExtensionsBox();
    //-->
    </script>

    <!-- Blue: Templates -->
    <script type="text/javascript">
    <!--
    // Get the templates box from a separate file.
    DL.createTemplatesBox();
    //-->
    </script>

  </div> <!-- class "optionset" -->

  <div class="additionalinformation">

    <!-- Navigation bar -->
    <script type="text/javascript">
    <!--
    // Get the navigation bar from a separate file.
    DL.createNavigationBar();
    //-->
    </script>

    <br /><br />

    <!-- Logo section -->
    <script type="text/javascript">
    <!--
    // Get the logo section from a separate file.
    DL.createLogoSection();
    //-->
    </script>

  </div> <!-- class: additionalinformation -->

</div> <!-- class: overall_optionset -->

</body>
</html>
