JavaでPDFからPDF/A、PDF/AからPDFに変換する方法

PDF/A（Portable Document Format Archivable）は、保存用のファイル形式です。文書の保存期間に関わらず、文書の詳細を保存し、まったく同じように再現することができます。時には、長期的な文書アーカイブの目的で、PDFをPDF/Aに変換する必要があるかもしれません。この記事では、無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使用して**PDFをPDF/Aに、またはPDF/AをPDFに変換する方法**を説明します。

- **[PDFをPDF/Aに変換する](#pdfをpdfaに変換する)**
- **[PDF/AをPDFに変換する](#pdfaをpdfに変換する)**

## 【依存関係の追加】
この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。

### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

```XML
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>
```

### 2. 公式サイトよりJarファイルをダウンロード
まず、[Free Spire.PDF for Java](https://jp.e-iceblue.com/download/free-spire-pdf-for-java.html) の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Pdf.jarファイルを依存関係としてプロジェクトにインポートしてください。

## PDFをPDF/Aに変換する
Spire.PDF for Javaは、PDFから以下のような様々なPDF/Aフォーマットへの変換をサポートしています。
- PDF/A-1a
- PDF/A-1b
- PDF/A-2a
- PDF/A-2b
- PDF/A-3a
- PDF/A-3b

> **以下の手順は、PDF文書を上記のPDF/A形式に変換する方法を示しています。**

- **PdfStandardsConverter** クラスのインスタンスを作成し、PDFドキュメントを読み込みます。
- **PdfStandardsConverter.toPdfA1A()** メソッドでドキュメントをPdf/A-1aに変換します。
- **PdfStandardsConverter.toPdfA1B()** メソッドを使用して、ドキュメントをPdf/A-1bに変換します。
- **PdfStandardsConverter.toPdfA2A()** メソッドを使用して、ドキュメントをPdf/A-2aに変換します。
- **PdfStandardsConverter.toPdfA2B()** メソッドを使用して、ドキュメントをPdf/A-2bに変換します。
- **PdfStandardsConverter.toPdfA3A()** メソッドを使用して、ドキュメントをPdf/A-3aに変換します。
- **PdfStandardsConverter.toPdfA3B()** メソッドを使用して、ドキュメントをPdf/A-3bに変換します。

**Java**

```Java
import com.spire.pdf.conversion.PdfStandardsConverter;

public class convertPdfToPdfA {
    public static void main(String[] args) {

        //PdfStandardsConverterクラスのインスタンスを生成し、PDF文書を読み込む
        PdfStandardsConverter converter = new PdfStandardsConverter("PDF.pdf");

        //PDFドキュメントをPdfA1Aに変換する
        converter.toPdfA1A("PdfA1A.pdf");

        //PDFドキュメントをPdfA1Bに変換する
        converter.toPdfA1B("PdfA1B.pdf");

        //PDFドキュメントをPdfA2Aに変換する
        converter.toPdfA2A( "PdfA2A.pdf");

        //PDFドキュメントをPdfA2Bに変換する
        converter.toPdfA2B("PdfA2B.pdf");

        //PDFドキュメントをPdfA3Aに変換する
        converter.toPdfA3A("PdfA3A.pdf");

        //PDFドキュメントをPdfA3Bに変換する
        converter.toPdfA3B("PdfA3B.pdf");
    }
}
```

## PDF/AをPDFに変換する
PDFと比較して、PDF/Aは、JavaScript、オーディオおよびビデオのコンテンツ、暗号化など、長期のアーカイブに適さないいくつかの機能を禁止しています。そのため、制限されている機能の一部を実行するために、PDF/A文書を通常のPDF文書に変換する必要がある場合があります。
> **以下の手順は、PDF/A文書を通常のPDF文書に変換する方法を示しています。**

- **PdfDocument** クラスのインスタンスを生成します。
- **PdfDocument.loadFromFile()** メソッドを使用してPDF/Aドキュメントをロードします。
- **PdfNewDocument** クラスのインスタンスを作成し、新しいPDFファイルを作成します。
- **PdfNewDocument.setCompressionLevel()** メソッドを使用して、新しいPDFドキュメントの適合性レベルを **PdfCompressionLevel.None** として設定します。
- PDF/A ドキュメント内のすべてのページをループします。
- **PdfNewDocument.getPages().add()** メソッドを使用して、PDF/A ドキュメントのページと同じサイズのページを新しく作成されたPDFドキュメントに追加します。
- PDF/A 文書のページからテンプレートを作成し、そのテンプレートを **PdfPageBase.createTemplate().draw()** メソッドを用いて新しいPDF文書のページに描画します。
- **PdfDocument.save()** メソッドを用いて、結果文書を保存します。

**Java**

```Java
import com.spire.pdf.PdfCompressionLevel;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfNewDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfMargins;

import java.awt.geom.Dimension2D;

public class convertPdfAToPdf {
    public static void main(String[] args) {

        //PdfDocument クラスのインスタンスを作成する
        PdfDocument doc = new PdfDocument();

        //PDF/Aドキュメントを読み込む
        doc.loadFromFile("PdfA1A.pdf");

        //PdfNewDocumentクラスのインスタンスを作成する
        PdfNewDocument newDoc = new PdfNewDocument();

        //新しいPDF文書の準拠レベルを「None」に設定する
        newDoc.setCompressionLevel(PdfCompressionLevel.None);

        //PDF/A文書内の全ページをループする
        for (PdfPageBase page : (Iterable<PdfPageBase>)doc.getPages())
        {
            Dimension2D size = page.getSize();
            //新しいPDF文書にページを追加する
            PdfPageBase p = newDoc.getPages().add(size, new PdfMargins(0));
            //PDF/A 文書のページからテンプレートを作成し、新しい PDF 文書のページに描画する
            page.createTemplate().draw(p, 0, 0);
        }

        //結果ドキュメントを保存する
        newDoc.save("通常のPDF.pdf");
    }
}
```

> **この記事では、PDFとPDF/Aの相互変換の詳細な手順についてご紹介します。PDF文書の変換に関するより詳しい情報は、[Spire.PDF Forum](https://www.e-iceblue.com/forum/spire-pdf-f7.html)に移動します。**