序章
Apache PDFBox ライブラリは、PDF ドキュメントを操作するためのオープン ソース Java ツールです。このプロジェクトでは、新しい PDF ドキュメントの作成、既存の PDF ドキュメントの操作、および PDF ドキュメントからのコンテンツの抽出が可能です。Apache PDFBox には、いくつかのコマンド ライン ユーティリティも含まれています。
Apache PDFBox の主な機能は次のとおりです。
- PDF ファイルから Unicode テキストを抽出します。
- 1 つの PDF を複数のファイルに分割するか、複数の PDF ファイルを結合します。
- PDF フォームからデータを抽出するか、PDF フォームに入力します。
- PDF ファイルが PDF/A-1b 標準に準拠していることを確認します。
- 標準の Java 印刷 API を使用して PDF ファイルを印刷します。
- PDF を PNG や JPEG などの画像ファイルとして保存します。
- フォントや画像の埋め込みなど、ゼロから PDF を作成します。
- PDF ファイルにデジタル署名します。
輸入
まず、PDFBox ライブラリが Java プロジェクトに追加されていることを確認する必要があります。Maven を使用している場合は、次の依存関係を pom.xml に追加します。
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.28</version>
</dependency>
ここで使用するバージョンは 2.0.28 です。
口で言うだけなら簡単です。コードを見せて。
PDF ドキュメントの作成
次のコードで簡単な PDF ドキュメントを作成できます。
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public class CreatePDF {
public static void main(String[] args) {
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDType1Font font = PDType1Font.HELVETICA_BOLD;
try {
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.beginText();
contentStream.setFont(font, 12);
contentStream.newLineAtOffset(100, 700);
contentStream.showText("Hello, World!");
contentStream.endText();
contentStream.close();
document.save(new File("one-more.pdf"));
document.close();
System.out.println("PDF created successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
このコード スニペットは、新しい PDF ドキュメントを作成し、最初のページに「Hello, World!」と書き込みます。Helvetica Bold フォントを使用し、サイズを 12 に設定しました。
次に、PDF ページにテキストを表示し、contentStream.close()
close オブジェクト メソッドを使用しますPDPageContentStream
。
最後に、ドキュメントを「one-more.pdf」ファイルとして保存し、PDDocument オブジェクトを閉じます。効果は次のとおりです。
PDFファイルを読む
次のコードを使用して、PDF ファイルの内容全体を読み取ることができます。
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
public class ReadPDFExample {
public static void main(String[] args) {
// 创建文件对象
File file = new File("one-more.pdf");
try {
// 创建 PDF 文档对象
PDDocument document = PDDocument.load(file);
// 创建 PDF 文本剥离器
PDFTextStripper stripper = new PDFTextStripper();
// 获取 PDF 文件的全部内容
String text = stripper.getText(document);
// 输出 PDF 文件的全部内容
System.out.println(text);
// 关闭 PDF 文档对象
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
まず、ファイル オブジェクトを作成し、次に PDDocument クラスの静的メソッド load() を使用して PDF ファイルをロードし、PDF ドキュメント オブジェクトを作成します。
次に、PDFTextStripper オブジェクトを作成し、その getText() メソッドを使用して PDF ファイルのコンテンツ全体を取得します。
最後に、PDF ファイルのコンテンツ全体を出力し、PDF ドキュメント オブジェクトを閉じます。
出力は、以前に書いたものです。
Hello, World!
画像を挿入
次のコードを使用して、PDF ファイルに画像を挿入できます。
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
public class InsertImageInPDF {
public static void main(String[] args) {
try {
// 加载PDF文件
PDDocument document = PDDocument.load(new File("one-more.pdf"));
// 获取第一页
PDPage page = document.getPage(0);
// 加载图像文件
PDImageXObject image = PDImageXObject.createFromFile("one-more.jpg", document);
// 在指定位置插入图像
PDPageContentStream contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, true, true);
contentStream.drawImage(image, 200, 500, image.getWidth(), image.getHeight());
// 关闭流
contentStream.close();
// 保存修改后的PDF文件
document.save("one-more-jpg.pdf");
// 关闭文档
document.close();
System.out.println("PDF created successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
この例では、「one-more.pdf」という PDF ファイルを読み込み、最初のページを取得して、「one-more.jpg」という画像ファイルを読み込みました。
次に、drawImage()
メソッドを使用して PDF ドキュメントの指定された位置に画像を挿入しました。
最後に、変更したドキュメントを「one-more-jpg.pdf」という名前の新しいファイルに保存し、ドキュメントを閉じます。効果は次のとおりです。
写真を読む
次のコードを使用して、PDF ファイル内の画像を読み取ることができます。
import java.io.IOException;
import java.util.List;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
public class ReadPDFImagesExample {
public static void main(String[] args) {
try {
// 加载PDF文件
PDDocument document = PDDocument.load(new File("one-more-jpg.pdf"));
PDPageTree pageTree = document.getPages();
// 遍历每个页面
for (PDPage page : pageTree) {
int pageNum = pageTree.indexOf(page) + 1;
int count = 1;
System.out.println("Page " + pageNum + ":");
for (COSName xObjectName : page.getResources().getXObjectNames()) {
PDXObject pdxObject = page.getResources().getXObject(xObjectName);
if (pdxObject instanceof PDImageXObject) {
PDImageXObject image = (PDImageXObject) pdxObject;
System.out.println("Found image with width "
+ image.getWidth()
+ "px and height "
+ image.getHeight()
+ "px.");
String fileName = "one-more-" + pageNum + "-" + count + ".jpg";
ImageIO.write(image.getImage(), "jpg", new File(fileName));
count++;
}
}
}
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
この例では、PDDocument
クラスを使用して指定された PDF ファイルからドキュメントを読み込み、各ページを反復処理してその中の画像を見つけます。
各ページについて、そのリソース (画像を含む) をフェッチし、画像がそこに存在するかどうかを確認します。
それらが存在する場合は、それらを繰り返し処理し、PDImageXObject
オブジェクトを使用して幅や高さなどのプロパティを取得します。
次に、ImageIO を使用してイメージをローカル ファイル システムに保存します。
出力は次のとおりです。
Page 1:
Found image with width 150px and height 150px.
終わり
Apache PDFBox は強力なツールであり、上記の関数に加えて、探索して発見する価値のある関数が他にもたくさんあります。Apache PDFBox について質問がある場合、またはより多くの機能を知りたい場合は、コメント欄で質問するか、公式 Web サイト ( https://pdfbox.apache.org/ ) に直接アクセスしてください。