iText ライブラリを使用して Java で PDF を作成して読み取る
- PDF ファイルを操作するための PDF とライブラリ
- 
          
            iTextライブラリの機能
- 
          
            Eclipse に iTextライブラリをインストールする手順
- 
          
            Java で iTextライブラリを使用して PDF ファイルを作成する手順
- 
          
            Java で iTextライブラリを使用して PDF ファイルを読み取る手順
 
iText ライブラリは、Java で PDF ファイルを作成、操作、および読み取るためのオープンソースライブラリです。この記事では、iText ライブラリ、Eclipse でのインストール、および iText ライブラリを使用した Java での PDF ファイルの作成と読み取りについて説明します。
PDF ファイルを操作するための PDF とライブラリ
Portable Document Format(PDF)は、ファイルを使用した広く使用されているデータ交換形式です。PDF は、ハードウェア、オペレーティングシステム、およびソフトウェアから独立しています。
したがって、非常に人気があり、テキスト、画像、その他のデータ型によく使用されます。
PDF ファイルを作成、読み取り、操作するために、多くのライブラリを利用できます。これらのライブラリのいくつかを以下に示します。
- 
iText-iTextのコミュニティバージョンはオープンソースライブラリです。Java を使用して PDF ファイルを読み取り、作成し、操作します。階層構造であり、任意の複雑な PDF ファイルを実行して目的の結果を生成できます。 iTextライブラリは Java と.NET で利用できます。
- 
Adobe PDFライブラリ-Adobe は、PDF ファイルを作成、操作、および読み取るためにこのライブラリを開発しました。このライブラリを使用して PDF を印刷することもできます。このライブラリは、C++、Java、.NET などのさまざまな言語で動作します。 
- 
PDFBox- これは別のオープンソースライブラリです。Apache は、PDF ファイルを作成、編集、および表示するためにこのライブラリを開発し、Java で使用できます。
- 
Jasper Reports- このレポートツールは、PDF ファイルでレポートを生成できます。
iText ライブラリの機能
iText ライブラリの機能のいくつかを見てみましょう。
- PDF ファイルの作成-iTextライブラリを使用して、任意に複雑でインタラクティブな PDF ファイルを作成できます。PDF ファイルに画像を挿入することもできます。
- iTextライブラリを使用して、ブックマークの作成、ページ番号の追加、および PDF ファイルへの透かしの追加を行うことができます。
- PDF ファイルに対して分割およびマージ操作を実行できます。
- iTextライブラリは、PDF ファイルのインタラクティブフォームを操作する機能を提供します。
- PDF ファイルを JPG、PNG などのさまざまな形式の画像として保存できます。
Eclipse に iText ライブラリをインストールする手順
    
iText ライブラリはサードパーティのオープンソースソフトウェアであり、使用する前に Java プロジェクトとは別にインストールする必要があります。この記事では、Eclipse での iText のインストール手順について説明します。
Eclipse は、Java でのアプリケーション開発に使用される最も人気のある IDE の 1つです。この記事は、Java と Eclipse がすでにインストールされていることを前提としています。
他の IDE で作業している場合でも、インストールプロセスは同様です。
iText ライブラリを Eclipse プロジェクトに追加する手順を見てみましょう。
- 
Eclipse でプロジェクトを作成します(ファイル->新規->Java プロジェクト)。
- 
プロジェクトを右クリックすると、ドロップダウンメニューが表示されます。
- 
構成に移動します。
- 
Maven プロジェクトに変換をクリックします。
- 
プロジェクトフォルダにpom.xmlという名前の新しいファイルが表示されます。
- 
pom.xmlを開き、<project>タグ内および<build>タグの後に次の依存関係を追加します。<dependencies> <dependency> <groupId>com.itextpdf</groupId> <artifactId>barcodes</artifactId> <version>7.2.1</version> <!-- barcodes depends on kernel --> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>font-asian</artifactId> <version>7.2.1</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>forms</artifactId> <version>7.2.1</version> <!-- forms depends on kernel and layout --> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>hyph</artifactId> <version>7.2.1</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>io</artifactId> <version>7.2.1</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>kernel</artifactId> <version>7.2.1</version> <!-- kernel depends on io --> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>layout</artifactId> <version>7.2.1</version> <!-- layout depends on kernel --> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>pdfa</artifactId> <version>7.2.1</version> <!-- pdfa depends on kernel --> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>sign</artifactId> <version>7.2.1</version> <!-- sign depends on kernel, layout and forms --> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>commons</artifactId> <version>7.2.1</version> <!-- sign depends on kernel, layout and forms --> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>styled-xml-parser</artifactId> <version>7.2.1</version> <!-- sign depends on kernel, layout and forms --> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>svg</artifactId> <version>7.2.1</version> <!-- sign depends on kernel, layout and forms --> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.13.3</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.13.3</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.13.3</version> </dependency> </dependencies>プロジェクトは、書き込み時に iTextライブラリの最新バージョン(7.2.1)を使用することに注意してください。利用可能な場合は、新しいバージョンにアップグレードできます。
- 
メニューバーのFileに移動し、Refreshをクリックします。
これにより、必要なライブラリがプロジェクトにインポートされます。ライブラリは Maven リポジトリからダウンロードされるため、安定したインターネット接続が必要です。
Java で iText ライブラリを使用して PDF ファイルを作成する手順
ライブラリをインストールしたら、iText ライブラリを使用して、Java プログラムを使用して PDF ファイルを作成できます。
iText ライブラリには、書き込むための新しい pdf ファイルを作成する PdfWriter という名前のクラスがあります。ファイルを開いたら、テキストや画像などを追加します。
PDF ファイルを作成し、それにテキストと画像を追加する手順を理解しましょう。
- 
ファイルの名前をパラメーターとしてコンストラクターに渡して、 PdfWriterクラスのインスタンスを作成します。
- 
PdfWriterクラスをコンストラクターに渡して、PdfDocumentクラスのインスタンスの作成に進みます。このクラスは、PDF ファイルへの書き込みを担当します。
- 
最後に、 Documentクラスインスタンスを作成します。PdfDocumentクラスインスタンスにアタッチします。このクラスは、個々の要素を pdf ファイルに添付するために使用されます。 
- 
この時点で、PDF ファイルにテキストと画像を書き込む準備ができています。 
Java で iText ライブラリを使用して PDF ファイルにテキストを書き込む手順
ファイルにテキストを書き込む手順を見てみましょう。
- Paragraphクラスは、テキストを pdf に書き込むために使用されます。したがって、- Paragraphクラスのインスタンスを作成する必要があります。
- add()メソッドを呼び出すことにより、テキストを追加できます。
- setTextAlignment()、- setFont()などのさまざまなメソッドを呼び出すことにより、テキストの外観を変更できます。
- 最後に、add()メソッドを呼び出して、paragraphインスタンスをDocumentインスタンスに追加します。
最後に、すべてのインスタンスをドキュメントに追加したら、Document クラスの close() メソッドを呼び出してドキュメントを閉じる必要があります。
Java で iText ライブラリを使用して PDF を作成するコード例
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import java.io.IOException;
public class pdfExample {
  public static void main(String[] args) {
    String file = "sample_pdf.pdf";
    try {
      createPdf(file);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  private static void createPdf(String file) throws IOException {
    PdfWriter writer = new PdfWriter(file);
    PdfDocument pdfDoc = new PdfDocument(writer);
    Document doc = new Document(pdfDoc);
    PdfFont myFont = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);
    Paragraph p1 = new Paragraph();
    p1.add("Hello, This is Delftstack!");
    p1.setTextAlignment(TextAlignment.CENTER);
    p1.setFont(myFont);
    p1.setFontSize(28);
    doc.add(p1);
    Paragraph p2 = new Paragraph();
    p2.add("We help you understand the concepts.");
    p2.setFontSize(18);
    doc.add(p2);
    doc.close();
  }
}
上記のコードを使用して作成された pdf ファイルを以下に示します。

Java で iText ライブラリを使用して PDF ファイルを読み取る手順
iText ライブラリは、PDF ファイルを読み取るための PdfReader クラスを提供します。以下の手順で PDF ファイルを読み取ることができます。
- まず、ファイルのパスをコンストラクターに渡して、PdfReaderクラスのインスタンスを作成する必要があります。
- PdfReaderのインスタンスをコンストラクターに渡して、- PdfDocumentクラスインスタンスを作成します。
- PDF ファイルに複数のページが含まれている場合は、各ページをループする必要があります。ページ数を取得するには、PdfDocumentクラスのインスタンスを使用してgetNumberOfPages()メソッドを呼び出すことができます。
- 各ページをループします。
 1.ドキュメントの現在のページを渡して、PdfTextExtractorクラスのgetTextFromPage()メソッドを呼び出します。
 2.現在のページを取得するには、DocumentクラスのgetPage()メソッドを呼び出して、現在のページ番号を渡す必要があります。
 3.getTextFromPage()メソッドは静的であるため、クラスインスタンスは必要ありません。
 4.このメソッドは、現在のページのすべてのテキストを返します。文字列変数に保存できます。
 5. テキストを処理します(たとえば、コンソールに表示します)。
Java で iText ライブラリを使用して PDF を読み取るコード例
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import java.io.IOException;
public class pdfExample {
  public static void main(String[] args) {
    String file = "sample_pdf.pdf";
    try {
      readpdf(file);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  private static void readpdf(String file) throws IOException {
    PdfReader pr = new PdfReader(file);
    PdfDocument doc = new PdfDocument(pr);
    int num = doc.getNumberOfPages();
    for (int i = 1; i <= num; i++) {
      String str = PdfTextExtractor.getTextFromPage(doc.getPage(i));
      System.out.println(str);
    }
  }
}
出力:
Hello, This is Delftstack!
We help you understand the concepts.
まとめ
この記事では、iText ライブラリを使用した PDF ファイルの読み取りと書き込みの基本について説明します。ただし、iText ライブラリは PDF ファイルに対して複雑な操作を実行できます。
iText ライブラリとその機能の詳細については、ドキュメントにアクセスしてください。