<!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="pl" lang="pl">
<head itemscope itemtype="http://schema.org/Article">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta itemprop="name" content="Pobierz Apache Openoffice" />
  <meta itemprop="description" content="Dołącz do rewolucyjnego OpenOffice, darmowego pakietu biurowego który pobrano już ponad 330 milionów razy." />
  <meta itemprop="image" content="https://www.openoffice.org/images/AOO_logos/AOO-Logo-Download.png" />
  <meta property="og:title" content="Pobierz Apache Openoffice" />
  <meta property="og:description" content="Dołącz do rewolucyjnego OpenOffice, darmowego pakietu biurowego który pobrano już ponad 330 milionów razy." />
  <meta property="og:image" content="https://www.openoffice.org/images/AOO_logos/AOO-Logo-Download.png" />
  <meta name="description" content="Oficjalna strona pobierania Apache OpenOffice. Dołącz do rewolucyjnego OpenOffice, darmowego pakietu biurowego który pobrano już ponad 330 milionów razy." />
  <title>Apache OpenOffice Pobieranie - Oficjalna strona</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_pl.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%2Fpl%2Fdownload%2F&text=Dołącz+do+rewolucyjnego+OpenOffice,+darmowego+pakietu+biurowego+który+pobrano+już+ponad+330+ milionów+razy.', '_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="Wybierz spośród wszystkich platform, języków, i paczek językowych do pobrania.">
          Apache OpenOffice Pobieranie - Oficjalna strona
        </a>
      </h2>
      <p>
        <a style="cursor: pointer;" href="https://sourceforge.net/projects/openofficeorg.mirror/files/"
          title="Wybierz spośród wszystkich platform, języków, i paczek językowych do pobrania.">Wydaję się że twoja przeglądarka ma wyłączony
	  JavaScript. Ta technika używana jest do pokazywania aktualnego linku do pobrania. Jeżeli chcesz pobrać Apache OpenOffice, kliknij na
	  ten tekst lub wybierz alternatywną stronę pobierania.
          Przepraszamy za niedogodności.
        </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>
