iText ライブラリを使用して Java で PDF を作成して読み取る

Mohd Mohtashim Nawaz 2024年2月16日
  1. PDF ファイルを操作するための PDF とライブラリ
  2. iText ライブラリの機能
  3. Eclipse に iText ライブラリをインストールする手順
  4. Java で iText ライブラリを使用して PDF ファイルを作成する手順
  5. Java で iText ライブラリを使用して PDF ファイルを読み取る手順
iText ライブラリを使用して Java で PDF を作成して読み取る

iText ライブラリは、Java で PDF ファイルを作成、操作、および読み取るためのオープンソースライブラリです。この記事では、iText ライブラリ、Eclipse でのインストール、および iText ライブラリを使用した Java での PDF ファイルの作成と読み取りについて説明します。

PDF ファイルを操作するための PDF とライブラリ

Portable Document Format(PDF)は、ファイルを使用した広く使用されているデータ交換形式です。PDF は、ハードウェア、オペレーティングシステム、およびソフトウェアから独立しています。

したがって、非常に人気があり、テキスト、画像、その他のデータ型によく使用されます。

PDF ファイルを作成、読み取り、操作するために、多くのライブラリを利用できます。これらのライブラリのいくつかを以下に示します。

  1. iText - iText のコミュニティバージョンはオープンソースライブラリです。Java を使用して PDF ファイルを読み取り、作成し、操作します。

    階層構造であり、任意の複雑な PDF ファイルを実行して目的の結果を生成できます。iText ライブラリは Java と.NET で利用できます。

  2. Adobe PDF ライブラリ-Adobe は、PDF ファイルを作成、操作、および読み取るためにこのライブラリを開発しました。このライブラリを使用して PDF を印刷することもできます。

    このライブラリは、C++、Java、.NET などのさまざまな言語で動作します。

  3. PDFBox - これは別のオープンソースライブラリです。Apache は、PDF ファイルを作成、編集、および表示するためにこのライブラリを開発し、Java で使用できます。

  4. Jasper Reports - このレポートツールは、PDF ファイルでレポートを生成できます。

iText ライブラリの機能

iText ライブラリの機能のいくつかを見てみましょう。

  1. PDF ファイルの作成-iText ライブラリを使用して、任意に複雑でインタラクティブな PDF ファイルを作成できます。PDF ファイルに画像を挿入することもできます。
  2. iText ライブラリを使用して、ブックマークの作成、ページ番号の追加、および PDF ファイルへの透かしの追加を行うことができます。
  3. PDF ファイルに対して分割およびマージ操作を実行できます。
  4. iText ライブラリは、PDF ファイルのインタラクティブフォームを操作する機能を提供します。
  5. 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 ファイルを作成し、それにテキストと画像を追加する手順を理解しましょう。

  1. ファイルの名前をパラメーターとしてコンストラクターに渡して、PdfWriter クラスのインスタンスを作成します。

  2. PdfWriter クラスをコンストラクターに渡して、PdfDocument クラスのインスタンスの作成に進みます。このクラスは、PDF ファイルへの書き込みを担当します。

  3. 最後に、Document クラスインスタンスを作成します。PdfDocument クラスインスタンスにアタッチします。

    このクラスは、個々の要素を pdf ファイルに添付するために使用されます。

  4. この時点で、PDF ファイルにテキストと画像を書き込む準備ができています。

Java で iText ライブラリを使用して PDF ファイルにテキストを書き込む手順

ファイルにテキストを書き込む手順を見てみましょう。

  1. Paragraph クラスは、テキストを pdf に書き込むために使用されます。したがって、Paragraph クラスのインスタンスを作成する必要があります。
  2. add() メソッドを呼び出すことにより、テキストを追加できます。
  3. setTextAlignment()setFont() などのさまざまなメソッドを呼び出すことにより、テキストの外観を変更できます。
  4. 最後に、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 ファイルを以下に示します。

作成された PDF ファイル

Java で iText ライブラリを使用して PDF ファイルを読み取る手順

iText ライブラリは、PDF ファイルを読み取るための PdfReader クラスを提供します。以下の手順で PDF ファイルを読み取ることができます。

  1. まず、ファイルのパスをコンストラクターに渡して、PdfReader クラスのインスタンスを作成する必要があります。
  2. PdfReader のインスタンスをコンストラクターに渡して、PdfDocument クラスインスタンスを作成します。
  3. PDF ファイルに複数のページが含まれている場合は、各ページをループする必要があります。ページ数を取得するには、PdfDocument クラスのインスタンスを使用して getNumberOfPages() メソッドを呼び出すことができます。
  4. 各ページをループします。
    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 ライブラリとその機能の詳細については、ドキュメントにアクセスしてください。

関連記事 - Java PDF