Verwenden Sie Apache PDFBox, um PDF-Dateien zu bearbeiten

Einführung

Die Apache PDFBox-Bibliothek ist ein Open-Source-Java-Tool zur Bearbeitung von PDF-Dokumenten. Dieses Projekt ermöglicht das Erstellen neuer PDF-Dokumente, das Bearbeiten vorhandener PDF-Dokumente und das Extrahieren von Inhalten aus PDF-Dokumenten. Apache PDFBox enthält auch mehrere Befehlszeilenprogramme.

Die Hauptfunktionen von Apache PDFBox sind wie folgt:

  • Extrahieren Sie Unicode-Text aus PDF-Dateien.
  • Teilen Sie ein einzelnes PDF in mehrere Dateien auf oder führen Sie mehrere PDF-Dateien zusammen.
  • Extrahieren Sie Daten aus PDF-Formularen oder füllen Sie PDF-Formulare aus.
  • Stellen Sie sicher, dass eine PDF-Datei mit dem PDF/A-1b-Standard konform ist.
  • Drucken Sie PDF-Dateien mit der standardmäßigen Java-Druck-API.
  • Speichern Sie PDF als Bilddatei, z. B. PNG oder JPEG.
  • Erstellen Sie PDFs von Grund auf, einschließlich der Einbettung von Schriftarten und Bildern.
  • PDF-Dateien digital signieren.

importieren

Zuerst müssen wir sicherstellen, dass die PDFBox-Bibliothek zu meinem Java-Projekt hinzugefügt wurde. Wenn Sie Maven verwenden, fügen Sie die folgenden Abhängigkeiten zu pom.xml hinzu:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.28</version>
</dependency>

Die hier verwendete Version ist: 2.0.28.

Reden ist billig. Zeig mir den Code.

PDF-Dokumente erstellen

Wir können ein einfaches PDF-Dokument mit dem folgenden Code erstellen:

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();
        }
    }
}

Dieses Code-Snippet erstellt ein neues PDF-Dokument und schreibt „Hello, World!“ auf die erste Seite. Ich habe die Schriftart Helvetica Bold verwendet und die Größe auf 12 eingestellt.

Als nächstes zeige ich den Text auf der PDF-Seite an und verwende contentStream.close()die Methode close PDPageContentStreamobject.

Schließlich speichere ich das Dokument als "one-more.pdf"-Datei und schließe dann das PDDocument-Objekt. Die Wirkung ist wie folgt:

Wanmao-Gesellschaft

PDF-Dateien lesen

Wir können den gesamten Inhalt einer PDF-Datei mit dem folgenden Code lesen:

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();
        }
    }
}

Erstellen Sie zuerst ein Dateiobjekt, verwenden Sie dann die statische Methode load() der PDDocument-Klasse, um die PDF-Datei zu laden und ein PDF-Dokumentobjekt zu erstellen.

Dann erstellen wir ein PDFTextStripper-Objekt und verwenden seine getText()-Methode, um den gesamten Inhalt der PDF-Datei abzurufen.

Abschließend geben wir den gesamten Inhalt der PDF-Datei aus und schließen das PDF-Dokumentobjekt.

Die Ausgabe ist das, was wir zuvor geschrieben haben:

Hello, World!

Bild einfügen

Wir können den folgenden Code verwenden, um ein Bild in eine PDF-Datei einzufügen:

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();
        }
    }
}

In diesem Beispiel haben wir eine PDF-Datei namens „one-more.pdf“ geladen, die erste Seite abgerufen und eine Bilddatei namens „one-more.jpg“ geladen.

Dann haben wir drawImage()das Bild mit der Methode an der angegebenen Position in das PDF-Dokument eingefügt.

Schließlich speichern wir das geänderte Dokument in einer neuen Datei mit dem Namen "one-more-jpg.pdf" und schließen das Dokument. Die Wirkung ist wie folgt:

Bilder lesen

Wir können ein Bild in einer PDF-Datei mit dem folgenden Code lesen:

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();
        }
    }
}

In diesem Beispiel verwenden wir PDDocumenteine Klasse, um ein Dokument aus einer angegebenen PDF-Datei zu laden und durch jede Seite zu iterieren, um darin enthaltene Bilder zu finden.

Für jede Seite rufen wir ihre Ressourcen (einschließlich Bilder) ab und prüfen, ob ein Bild darin vorhanden ist.

Wenn sie vorhanden sind, durchlaufen wir sie und verwenden PDImageXObjectdas Objekt, um ihre Eigenschaften wie Breite und Höhe abzurufen.

Verwenden Sie dann ImageIO, um das Image im lokalen Dateisystem zu speichern.

Die Ausgabe ist wie folgt:

Page 1:
Found image with width 150px and height 150px.

Ende

Apache PDFBox ist ein leistungsstarkes Tool.Zusätzlich zu den oben genannten Funktionen gibt es viele andere Funktionen, die es wert sind, erkundet und entdeckt zu werden. Wenn Sie Fragen zu Apache PDFBox haben oder mehr Funktionen wissen möchten, können Sie mich gerne im Kommentarbereich fragen oder direkt die offizielle Website besuchen: https://pdfbox.apache.org/ .

Guess you like

Origin blog.csdn.net/heihaozi/article/details/130245373