<html>
<head>
    <title>Apache OpenOffice Support</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style>
    @import url(print.css);
    </style>
</head>
<body>
<h1 class="welcometitle">Welcome to Apache OpenOffice Support</h1>

<p>
Welcome to the Apache OpenOffice Support area. Listed here are links to:
<ul>
    <li>
        <a href="#community-support">Community support</a>
    </li>
    <li>
        <a href="#rtfm">Product documentation</a>
    </li>
     <li>
        <a href="#professional-services">Professional services</a>
    </li>
    <li>
        <a href="#books">Books about OpenOffice</a>.
    </li>
   <li>
        <a href="#online-resources">Other Online resources</a>
    </li>
</ul>
</p>


    <a name="community-support" id="community-support"></a> 
    <span class="supporthead">OpenOffice Community Support </span>
    <div class="support">
        <ul>
            <li>
                <span class='title'>
                <a href="http://forum.openoffice.org/">The Apache OpenOffice Community Forum</a>
                </span>
                <br/>
                The premier forum for OpenOffice users; immensely useful and recommended.  Get free help from volunteers in the community. The forum volunteers can help with everything from installation to "how tos" on advanced topics. 
            </li>
            <li>
                <span class='title'>
                <a href="http://openoffice.apache.org/mailing-lists.html#users-mailing-list-public">Users Mail List</a>
                </span>
                &nbsp;(<a href="mailto:users-subscribe@openoffice.apache.org?subject=subscribe%20users">Subscribe</a> 
                / <a href="https://openoffice.apache.org/mailing-lists.html#users-mailing-list-public">Archives</a>)
                <br>
                Another community support option, via a public mailing list.  You must subscribe to the list if you want to view responses to your question. 
            </li>
            <li>
                <span class='title'>
                <a href="http://openoffice.apache.org/native-lang.html">Apache OpenOffice Native Language Mailing Lists</a>
                </span>
                <br />
                Mailing lists for several native languages.
            </li>
             <li>
            <span class='title'>
            <a href="http://qa.openoffice.org/issue_handling/pre_submission.html">Issue Tracker (bug reporting and lookup)</a>
            </span>
            <br />
            A good place to check to see if a bug is already known.  Anyone can search for bugs, but you must register to submit a new issue. <br /><em>Note:</em> This is not the way to get help for general problems. Please use the Forums or Users mailing list for these types of problems. 
        </li>
		</ul>

    </div>
    
<a name="rtfm" id="rtfm"></a> 
<span class="supporthead">OpenOffice Documentation</span>
<div class="support">
    <ul>
        <li>
            <span class='title'>
            <a href="http://wiki.openoffice.org/wiki/Documentation">OpenOffice Wiki: Documentation area</a>
            </span>
            <br />
            FAQs, User Guides, How-To's, Tutorials, Installation, etc.  Highly recommended 
            as initial source of self-support for new users.
        </li>
    </ul>
  </div>

 
   <a name="professional-services" id="professional-services"></a> 
    <span class='supporthead'>Professional Services</span>
    <div class="support">
        <p>On our <a href="/bizdev/consultants.html">Consultants page</a> you will find a listing of individuals and companies that offer professional services related to OpenOffice.</p>
 </div>

    <a name="books" id="books"></a> 
    <span class='supporthead'>Books about OpenOffice</span>
    <div class="support">
        <p>On our <a href="books.html">Books page</a> you will find a listing of the many books written about OpenOffice topics, for general and specialized use.</p>

   <a name="online-resources" id="online-resources"></a> 
    <span class='supporthead'>Online Resources</span>
    <div class="support">
        <p>The following websites are not operated by the Apache OpenOffice project, but have content that may be of interest to users.</p>
        <ul>
            <li>
                <span class='title'>
                <a rel="nofollow" href="http://www.oooforum.org/">The (Unofficial) OpenOffice Forum - <em>currently unstable</em></a>
                </span>
                <br />
                Discussion site for all things related OpenOffice 
            </li>
            <li>
                <span class='title'>
                <a rel="nofollow" href="http://openofficeschool.org/">OpenOfficeSchool.org</a>
                </span>
                <br />
                Free lessons in Calc
            </li>
            <li>
                <span class='title'>
                <a rel="nofollow" href="http://www.8daysaweek.co.uk/openofficeorg.htm">8daysaweek</a>
                </span>
                <br />
                General help for users of OpenOffice 
            </li>
            <li>
                <span class='title'>
                <a rel="nofollow" href="http://www.pitonyak.org/oo.php">Macro Guide</a>
                </span>
                <br />
                Free guide to OpenOffice macros. 
            </li>

        </ul>
    </div>

<div style="clear: both;"></div>

</body>
</html>
