<!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="fr" lang="fr">
<head itemscope itemtype="http://schema.org/Article">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta property="og:title" content="Download 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:keywords" content="Apache OpenOffice, OpenOffice, Apache Open Office, Download, Official, Official Download, Open Office, OpenOffice.org" />
  <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." />
  <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
  <link rel="icon" href="/favicon.ico" type="image/x-icon" />
  <title>Apache OpenOffice Downloads - Official Site</title>
  <script src="/download/globalvars.js"></script>
  <script src="/download/msg_prop_l10n_en.js"></script>
  <script src="./msg_prop_l10n_fr.js"></script>
  <script src="/download/languages.js"></script>
  <script src="/download/release_matrix.js"></script>
  <script src="/download/boxed_download.js"></script>
  <script src="/download/download.js"></script>
  <style>
  /* <![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%2Fxx%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 itemscope>
  <span itemprop="name" content="Download Apache OpenOffice"></span>
  <span itemprop="description" content="Join the OpenOffice revolution, the free office productivity suite with over 330 million trusted downloads."></span>
  <span itemprop="keywords" content="Apache OpenOffice, OpenOffice, Apache Open Office, Download, Official, Official Download, Open Office, OpenOffice.org"></span>
  <span itemprop="image" content="https://www.openoffice.org/images/AOO_logos/AOO-Logo-Download.png"></span>
</div>

<div class="overall_optionset">

  <div class="optionset">

    <!-- Text above the first colored box -->
    <script>
      <!--
      // 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>
      <!--

      // 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>
	<!--
	// 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>
