如何在 Java 中读写 PDF 文件

原文:https://www.studytonight.com/java-examples/how-to-read-and-write-pdf-file-in-java

在这篇文章中,我们将学习使用 Java 代码读写 pdf 文件。pdf 是一个便携式文档文件,用于传输信息文档。它是广泛使用的文件格式之一。

为了处理 Java 中的 pdf 文件,我们使用了由 apache 基金会设计和开发的 pdfbox 库。它用于以高效的方式创建、读取、写入和追加 pdf 文件。

在阅读 pdf 文件之前,您必须下载此库。可以在这里下载。下载的文件基本上都是 JARs 文件,所以请将它们导入到您的项目中,并开始使用 pdf。

有一些重要的类PDDocumentPDPagePDPageContentStream等需要加载和获取数据。

如果您正在使用 maven 项目,那么在您的 pom.xml 文件中使用以下依赖项。

//POM . XML

<project  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.studytonight.pdfExample</groupId>
  <artifactId>pdfExample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.12</version>
</dependency>
  </dependencies>
</project>

它会自动下载你项目中所有需要的 JARs。所以,你不需要手动下载罐子。添加这些依赖项后,在您的 Java 项目中使用下面的示例代码来读写 PDF 文件。

**## 举例时间:

让我们从一个使用 PDFBox 库读取 pdf 文件的例子开始。在这里,我们有一个 pdf 文件test.pdf,我们用load()方法加载,用getText()方法读取。

import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

public class Main {
    public static void main(String[] args) throws IOException{  
        try {
            // Creating file instance
            File file = new File("test.pdf");
            // Loading pdf file
            PDDocument document = PDDocument.load(file);
            PDFTextStripper pdfStripper = new PDFTextStripper();
            // Fetching PDF document
            String text = pdfStripper.getText(document);
            System.out.println(text);
            // Closing the document
            document.close();
        }catch(Exception e) {
            System.out.println(e);
        }

    }
}

示例:

由于 PDFBox 是为 pdf 处理而制作的,所以我们可以将数据写入 pdf 文件。这里,我们在追加模式下向test.pdf文件写入数据,对于追加模式,我们在PDPageContentStream中使用了APPEND常量,这样文件数据就不会被替换。我们使用setFont()方法设置字体,save()方法保存对文件的更改。

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.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class Main {
    public static void main(String[] args) throws IOException{  
          PDDocument document = PDDocument.load(new File("test.pdf")); 
          PDPage page = document.getPage(0);
          PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND,true,true);
          contentStream.beginText(); 

          //Setting the font  
          contentStream.setFont(PDType1Font.TIMES_ROMAN, 12);

          //Setting the text position 
          contentStream.newLineAtOffset(25, 500);

          String text = "This message is writtern to the pdf file."; 
          contentStream.showText(text);      
          contentStream.endText();
          contentStream.close();          
          // Saving file after writing
          document.save(new File("test.pdf"));
          document.close();
    }
}

执行此程序后,将在当前目录中创建一个 PDF 文件test.pdf。您可以打开该文件,看到它包含我们用代码保存的文本。