Apache PDFBox を使用して PDF ファイルを操作する

序章

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/ ) に直接アクセスしてください。

おすすめ

転載: blog.csdn.net/heihaozi/article/details/130245373