<!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="ast" lang="ast">
<head>
    <meta name="description" content="La páxina web oficial del proyeutu de códigu abiertu Apache OpenOffice, web d'OpenOffice Writer, Calc, Impress, Draw y Base." />
    <meta name="keywords" content="OpenOffice, Open Office, Apache OpenOffice, Apache Open Office, OpenOffice.org, Calc, Impress, Draw, Base, ODF, Open Document Format, editores d'ofimatica llibres" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache OpenOffice - La suite de productividá abierta y llibre - Sitiu oficial</title>
    <script type="text/javascript" src="/download/globalvars.js"></script>
    <script type="text/javascript" src="./msg_prop_l10n_ast.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/'>"
          + "<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/">
          <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="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="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="YouTube" />
                <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>
