---
license: Licensed to the Apache Software Foundation (ASF) under one
         or more contributor license agreements.  See the NOTICE file
         distributed with this work for additional information
         regarding copyright ownership.  The ASF licenses this file
         to you under the Apache License, Version 2.0 (the
         "License"); you may not use this file except in compliance
         with the License.  You may obtain a copy of the License at

           http://www.apache.org/licenses/LICENSE-2.0

         Unless required by applicable law or agreed to in writing,
         software distributed under the License is distributed on an
         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
         KIND, either express or implied.  See the License for the
         specific language governing permissions and limitations
         under the License.

layout:  default
title:   Download
---

<h1>{{title}}</h1>

<h2>Latest Releases</h2>

<p>The Apache PDFBox community provides feature and bugfix releases.</p>

<ul>
    <li>Feature release for PDFBox 3.0.x &mdash; <a href="https://downloads.apache.org/pdfbox/3.0.5/RELEASE-NOTES.txt">3.0.5</a> (requires Java 8)</li>
    <li>Feature release for PDFBox 2.0.x &mdash; <a href="https://downloads.apache.org/pdfbox/2.0.34/RELEASE-NOTES.txt">2.0.34</a> (requires Java 6)</li>
    <li>Feature release of JBIG2 ImageIO plugin 3.0.x &mdash; <a href="https://downloads.apache.org/pdfbox/jbig2-imageio/3.0.4/RELEASE-NOTES.txt">3.0.4</a> (requires Java 6)</li>
    <li><a href="#oldreleases">Previous releases</a></li>
</ul>

<p>See also the <a href="#exportcontrol">export control</a> information related to the encryption features included in Apache PDFBox.</p>

<h2>Current releases</h2>

<h3>Binary Distribution</h3>

<table class="table">
    <thead>
        <tr>
            <th>Version</th>
            <th>Description</th>
            <th>Download Link</th>
            <th>PGP Signature</th>
            <th>SHA512 Checksum</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td rowspan="12"><strong>PDFBox<br>3.0.5</strong><br><small>feature</small></td>
            <td colspan="4"><strong>Command line tools</strong></td>
        </tr>
        <tr>
            <td>PDFBox standalone</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/pdfbox-app-3.0.5.jar">pdfbox-app-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-app-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-app-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>Debugger standalone</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/debugger-app-3.0.5.jar">debugger-app-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/debugger-app-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/debugger-app-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>Preflight standalone</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/preflight-app-3.0.5.jar">preflight-app-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/preflight-app-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/preflight-app-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td colspan="4"><strong>Libraries of each subproject</strong></td>
        </tr>
        <tr>
            <td>pdfbox</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/pdfbox-3.0.5.jar">pdfbox-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>pdfbox-io</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/pdfbox-io-3.0.5.jar">pdfbox-io-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-io-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-io-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>fontbox</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/fontbox-3.0.5.jar">fontbox-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/fontbox-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/fontbox-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>preflight</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/preflight-3.0.5.jar">preflight-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/preflight-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/preflight-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>xmpbox</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/xmpbox-3.0.5.jar">xmpbox-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/xmpbox-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/xmpbox-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>pdfbox-tools</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/pdfbox-tools-3.0.5.jar">pdfbox-tools-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-tools-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-tools-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>pdfbox-debugger</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/pdfbox-debugger-3.0.5.jar">pdfbox-debugger-3.0.5.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-debugger-3.0.5.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-debugger-3.0.5.jar.sha512">SHA512</a></td>
        </tr>
    </tbody>
    <tbody>
        <tr>
            <td rowspan="11"><strong>PDFBox<br>2.0.34</strong><br><small>feature</small></td>
            <td colspan="4"><strong>Command line tools</strong></td>
        </tr>
        <tr>
            <td>PDFBox standalone</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/pdfbox-app-2.0.34.jar">pdfbox-app-2.0.34.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-app-2.0.34.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-app-2.0.34.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>Debugger standalone</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/debugger-app-2.0.34.jar">debugger-app-2.0.34.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/debugger-app-2.0.34.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/debugger-app-2.0.34.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>Preflight standalone</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/preflight-app-2.0.34.jar">preflight-app-2.0.34.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/preflight-app-2.0.34.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/preflight-app-2.0.34.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td colspan="4"><strong>Libraries of each subproject</strong></td>
        </tr>
        <tr>
            <td>pdfbox</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/pdfbox-2.0.34.jar">pdfbox-2.0.34.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-2.0.34.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-2.0.34.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>fontbox</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/fontbox-2.0.34.jar">fontbox-2.0.34.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/fontbox-2.0.34.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/fontbox-2.0.34.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>preflight</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/preflight-2.0.34.jar">preflight-2.0.34.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/preflight-2.0.34.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/preflight-2.0.34.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>xmpbox</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/xmpbox-2.0.34.jar">xmpbox-2.0.34.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/xmpbox-2.0.34.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/xmpbox-2.0.34.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>pdfbox-tools</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/pdfbox-tools-2.0.34.jar">pdfbox-tools-2.0.34.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-tools-2.0.34.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-tools-2.0.34.jar.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td>pdfbox-debugger</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/pdfbox-debugger-2.0.34.jar">pdfbox-debugger-2.0.34.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-debugger-2.0.34.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-debugger-2.0.34.jar.sha512">SHA512</a></td>
        </tr>
    </tbody>
    <tbody>
        <tr>
            <td rowspan="1"><strong>JBIG2<br>3.0.4</strong><br><small>feature</small></td>
            <td>JBIG2 ImageIO plugin</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/jbig2-imageio/3.0.4/jbig2-imageio-3.0.4.jar">jbig2-imageio-3.0.4.jar</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/jbig2-imageio/3.0.4/jbig2-imageio-3.0.4.jar.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/jbig2-imageio/3.0.4/jbig2-imageio-3.0.4.jar.sha512">SHA512</a></td>
        </tr>
    </tbody>
</table>

<h3>Source Distribution</h3>

<table class="table">
    <thead>
        <tr>
            <th>Version</th>
            <th>Description</th>
            <th>Download Link</th>
            <th>PGP Signature</th>
            <th>SHA512 Checksum</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><strong>PDFBox<br>3.0.5</strong><br><small>feature</small></td>
            <td>Source ZIP file incl. examples</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/3.0.5/pdfbox-3.0.5-src.zip">pdbox-3.0.5-src.zip</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-3.0.5-src.zip.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/3.0.5/pdfbox-3.0.5-src.zip.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td><strong>PDFBox<br>2.0.34</strong><br><small>feature</small></td>
            <td>Source ZIP file incl. examples</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/2.0.34/pdfbox-2.0.34-src.zip">pdfbox-2.0.34-src.zip</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-2.0.34-src.zip.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/2.0.34/pdfbox-2.0.34-src.zip.sha512">SHA512</a></td>
        </tr>
        <tr>
            <td><strong>JBIG2<br>3.0.4</strong><br><small>feature</small></td>
            <td>Source ZIP file</td>
            <td><a href="https://www.apache.org/dyn/closer.lua/pdfbox/jbig2-imageio/3.0.4/jbig2-imageio-3.0.4-src.zip">jbig2-imageio-3.0.4-src.zip</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/jbig2-imageio/3.0.4/jbig2-imageio-3.0.4-src.zip.asc">ASC</a></td>
            <td><a href="https://downloads.apache.org/pdfbox/jbig2-imageio/3.0.4/jbig2-imageio-3.0.4-src.zip.sha512">SHA512</a></td>
        </tr>
    </tbody>
</table>


<h3>Verify</h3>

<p>
    It is essential that you verify the integrity of the downloaded files using the PGP signatures or
    SHA512 checksums. Please read <a href="https://httpd.apache.org/dev/verification.html">Verifying Apache HTTP Server Releases</a>
    for more information on why you should verify our releases.
</p>

<p>
    The PGP signatures can be verified using PGP or GPG. First download the
    <a href="https://downloads.apache.org/pdfbox/KEYS">KEYS</a> file as well as the .asc signature files for the
    relevant release packages. Make sure you get these
    files from the <a href="https://downloads.apache.org/pdfbox">main distribution directory</a>, rather than
    from a mirror. Then verify the signatures using
</p>

<pre>
% pgpk -a KEYS
% pgpv pdfbox-X.Y.Z-src.zip.asc
</pre>

or

<pre>
% pgp -ka KEYS
% pgp pdfbox-X.Y.Z-src.zip.asc
</pre>

or

<pre>
% gpg --import KEYS
% gpg --verify pdfbox-X.Y.Z-src.zip.asc pdfbox-X.Y.Z-src.zip
</pre>

<a name="oldreleases"></a>
<h2>Previous releases</h2>

<p>
    Previous Apache releases (starting with version `0.8.0-incubating`) are available in the <a href="https://archive.apache.org/dist/pdfbox/">release archive</a>.
    Older releases (up to version `0.7.3`) published from SourceForge are still available on
    <a href="https://sourceforge.net/projects/pdfbox/files/PDFBox/">SourceForge Files</a>.
</p>

<a name="exportcontrol"></a>
<h2>Export control information</h2>

<p>This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export
to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import,
possession, or use, and re-export of encryption software, to see if this is permitted. See <http://www.wassenaar.org/> for more information.
</p>

<p>The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1,
which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation
distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations,
Section 740.13) for both object code and source code.
</p>

<p>The following provides more details on the included cryptographic software:
</p>

<ul>
    <li>Apache PDFBox uses the Java Cryptography Architecture (JCA) and the Bouncy Castle libraries for handling encryption in PDF documents.
        </li>
</ul>
