PDFBox - 快速指南

PDFBox - 概述

可移植文档格式 (PDF) 是一种文件格式,有助于以独立于应用软件、硬件和操作系统的方式呈现数据。

每个 PDF 文件都包含固定布局平面文档的描述,包括显示该文档所需的文本、字体、图形和其他信息。

有多个库可用于通过程序创建和操作 PDF 文档,例如 −

  • Adobe PDF 库 − 此库提供 C++、.NET 和 Java 等语言的 API,使用它我们可以编辑、查看打印和从 PDF 文档中提取文本。

  • 格式化对象处理器 − 由 XSL 格式化对象和独立于输出的格式化程序驱动的开源打印格式化程序。主要输出目标是 PDF。

  • iText − 该库提供 Java、C# 和其他 .NET 语言等语言的 API,使用这个库我们可以创建和操作 PDF、RTF 和 HTML 文档。

  • JasperReports − 这是一个 Java 报告工具,可生成 PDF 文档中的报告,包括 Microsoft Excel、RTF、ODT、逗号分隔值和 XML 文件。

什么是 PDFBox

Apache PDFBox 是一个开源 Java 库,支持 PDF 文档的开发和转换。使用此库,您可以开发用于创建、转换和操作 PDF 文档的 Java 程序。

除此之外,PDFBox 还包括一个命令行实用程序,可使用可用的 Jar 文件对 PDF 执行各种操作。

PDFBox 的功能

以下是 PDFBox 的显著功能 −

  • 提取文本 − 使用 PDFBox,您可以从 PDF 文件中提取 Unicode 文本。

  • 拆分和合并 − 使用 PDFBox,您可以将单个 PDF 文件分成多个文件,然后将它们合并为一个文件。

  • 填写表单 − 使用 PDFBox,您可以在文档中填写表单数据。

  • 打印 −使用 PDFBox,您可以使用标准 Java 打印 API 打印 PDF 文件。

  • 另存为图像 − 使用 PDFBox,您可以将 PDF 另存为图像文件,例如 PNG 或 JPEG。

  • 创建 PDF − 使用 PDFBox,您可以通过创建 Java 程序创建新的 PDF 文件,还可以包含图像和字体。

  • 签名 − 使用 PDFBox,您可以向 PDF 文件添加数字签名。

PDFBox 的应用

以下是 PDFBox 的应用 −

  • Apache Nutch − Apache Nutch 是一款开源网络搜索软件。它以 Apache Lucene 为基础,添加了 Web 特定功能,例如爬虫、链接图数据库、HTML 和其他文档格式的解析器等。

  • Apache Tika − Apache Tika 是一个工具包,用于使用现有的解析器库从各种文档中检测和提取元数据和结构化文本内容。

PDFBox 的组件

以下是 PDFBox 的四个主要组件 −

  • PDFBox − 这是 PDFBox 的主要部分。它包含与内容提取和操作相关的类和接口。

  • FontBox −这包含与字体相关的类和接口,使用这些类我们可以修改PDF文档文本的字体。

  • XmpBox − 这包含处理XMP元数据的类和接口。

  • Preflight − 此组件用于根据PDF/A-1b标准验证PDF文件。

PDFBox - 环境

安装 PDFBox

以下是下载 Apache PDFBox 的步骤 −

步骤 1 − 单击以下链接打开 Apache PDFBox 主页 − https://pdfbox.apache.org/

步骤 2 − 上述链接将引导您进入主页,如以下屏幕截图所示 −

PDFBox Homepage

步骤 3 − 现在,单击上述屏幕截图中突出显示的 下载 链接。点击后,您将被引导至 PDFBox 的下载页面,如以下屏幕截图所示。

PDFBox Downloads.jpg

步骤 4 − 在下载页面中,您将看到 PDFBox 的链接。点击最新版本的相应链接。例如,我们选择 PDFBox 2.0.1,点击后,您将被引导至所需的 jar 文件,如以下屏幕截图所示。

PDFBox Jarfiles.jpg

步骤 5 −下载 jar 文件 pdfbox-2.0.1.jar、fontbox-2.0.1.jar、preflight-2.0.1.jar、xmpbox-2.0.1.jar 和 pdfbox-tools-2.0.1.jar。

Eclipse 安装

下载所需的 jar 文件后,您必须将这些 JAR 文件嵌入到您的 Eclipse 环境中。您可以通过设置这些 JAR 文件的构建路径并使用 pom.xml 来执行此操作。

设置构建路径

以下是在 Eclipse 中安装 PDFBox 的步骤 −

步骤 1 − 确保您已在系统中安装了 Eclipse。如果没有,请在系统中下载并安装 Eclipse。

步骤 2 −打开 Eclipse,单击"文件"、"新建",然后打开一个新项目,如以下屏幕截图所示。

Eclipse 文件菜单

步骤 3 − 选择项目后,您将获得新建项目向导。在此向导中,选择 Java 项目,然后单击下一步按钮继续,如以下屏幕截图所示。

Eclipse 新建项目向导

步骤 4 − 继续操作后,您将被引导至新建 Java 项目向导。创建一个新项目并单击下一步,如以下屏幕截图所示。

创建项目向导

步骤 5 − 创建新项目后,右键单击它;选择构建路径并单击配置构建路径…,如以下屏幕截图所示。

Eclipse 构建路径

步骤 6 − 单击构建路径选项后,您将被引导至Java 构建路径向导。选择 添加外部 JAR,如以下屏幕截图所示。

Eclipse 外部 jars

步骤 7 − 选择 jar 文件 fontbox-2.0.1.jar、pdfbox-2.0.1.jar、pdfbox-tools-2.0.1.jar、preflight-2.0.1.jar、xmpbox-2.0.1.jar,如以下屏幕截图所示。

Jar 文件位置

步骤 8 −单击上面屏幕截图中的 打开 按钮后,这些文件将添加到您的库中,如下面的屏幕截图所示。

已添加 Jar 文件

第 9 步 − 单击 确定 后,您将成功将所需的 JAR 文件添加到当前项目,并且您可以通过展开引用的库来验证这些添加的库,如下面的屏幕截图所示。

Eclipse Jar 文件

使用 pom.xml

将项目转换为 maven 项目,并将以下内容添加到其 pom.xml。

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>my_project</groupId>
   <artifactId>my_project</artifactId>
   <version>0.0.1-SNAPSHOT</version>

   <build>
      <sourceDirectory>src</sourceDirectory>
      <plugins>
         <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
               <source>1.8</source>
               <target>1.8</target>
            </configuration> 
         </plugin>
      </plugins> 
   </build> 
   
   <dependencies>  
      <dependency> 
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>pdfbox</artifactId> 
         <version>2.0.1</version> 
      </dependency>   
   
      <dependency> 
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>fontbox</artifactId> 
         <version>2.0.0</version> 
      </dependency>
      
      <dependency>  
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>jempbox</artifactId> 
         <version>1.8.11</version> 
      </dependency> 
        
      <dependency>
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>xmpbox</artifactId> 
         <version>2.0.0</version> 
      </dependency> 
     
      <dependency> 
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>preflight</artifactId> 
         <version>2.0.0</version> 
      </dependency> 
     
      <dependency> 
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>pdfbox-tools</artifactId> 
         <version>2.0.0</version> 
      </dependency>

   </dependencies>
   
</project>

PDFBox - 创建 PDF 文档

现在让我们了解如何使用 PDFBox 库创建 PDF 文档。

创建空 PDF 文档

您可以通过实例化 PDDocument 类来创建空 PDF 文档。您可以使用 Save() 方法将文档保存在所需的位置。

以下是创建空 PDF 文档的步骤。

步骤 1:创建空文档

属于包 org.apache.pdfbox.pdmodelPDDocument 类是 PDFDocument 的内存表示。因此,通过实例化此类,您可以创建一个空的 PDFDocument,如以下代码块所示。

PDDocument document = new PDDocument();

步骤 2:保存文档

创建文档后,您需要将此文档保存在所需的路径中,您可以使用 PDDocument 类的 Save() 方法执行此操作。此方法接受一个字符串值作为参数,表示您要存储文档的路径。以下是 PDDocument 类的 save() 方法的原型。

document.save("Path");

步骤 3:关闭文档

当您的任务完成后,最后,您需要使用 close () 方法关闭 PDDocument 对象。以下是 PDDocument 类的 close() 方法的原型。

document.close();

示例

此示例演示了如何创建 PDF 文档。在这里,我们将创建一个 Java 程序来生成一个名为 my_doc.pdf 的 PDF 文档,并将其保存在路径 C:/PdfBox_Examples/ 中。将此代码保存在名为 Document_Creation.java 的文件中。

import java.io.IOException; 
import org.apache.pdfbox.pdmodel.PDDocument;
  
public class Document_Creation {
    
   public static void main (String args[]) throws IOException {
       
      //创建PDF文档对象
      PDDocument document = new PDDocument();    
       
      //保存文档
      document.save("C:/PdfBox_Examples/my_doc.pdf");
         
      System.out.println("PDF created");  
    
      //关闭文档  
      document.close();

   }  
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac Document_Creation.java
java Document_Creation

执行后,上述程序将创建一个 PDF 文档,并显示以下消息。

PDF created

如果验证指定的路径,则可以找到创建的 PDF 文档,如下所示。

My Doc Saved

由于这是一个空文档,如果您尝试打开此文档,则会提示您显示错误消息,如以下屏幕截图所示。

空 PDF

PDFBox - 添加页面

在上一章中,我们了解了如何创建 PDF 文档。创建 PDF 文档后,您需要向其中添加页面。现在让我们了解如何在 PDF 文档中添加页面。

向 PDF 文档添加页面

您可以通过实例化 PDPage 类来创建一个空页面,并使用 PDDocument 类的 addPage() 方法将其添加到 PDF 文档。

以下是创建空文档并向其中添加页面的步骤。

步骤 1:创建空文档

通过实例化 PDDocument 类创建一个空 PDF 文档,如下所示。

PDDocument document = new PDDocument();

步骤 2:创建空白页

PDPage 类表示 PDF 文档中的页面,因此,您可以通过实例化此类来创建一个空白页,如以下代码块所示。

PDPage my_page = new PDPage();

步骤 3:将页面添加到文档

您可以使用 PDDocument 类的 addPage() 方法将页面添加到 PDF 文档。您需要将 PDPage 对象作为参数传递给此方法。

因此,将上一步中创建的空白页添加到 PDDocument 对象,如以下代码块所示。

document.addPage(my_page);

通过这种方式,您可以向 PDF 文档添加任意数量的页面。

步骤 4:保存文档

添加所有页面后,使用 PDDocument 类的 save() 方法保存 PDF 文档,如以下代码块所示。

document.save("Path");

步骤 5:关闭文档

最后使用 PDDocument 类的 close() 方法关闭文档,如下所示。

document.close();

示例

此示例演示如何创建 PDF 文档并向其中添加页面。这里我们将创建一个名为 my_doc.pdf 的 PDF 文档,并向其中添加 10 页空白页,并将其保存在路径 C:/PdfBox_Examples/ 中。将此代码保存在名为 Adding_pages.java.

的文件中
package document;
 
import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;

public class Adding_Pages {

   public static void main(String args[]) throws IOException {
       
      //创建PDF文档对象
      PDDocument document = new PDDocument();

      for (int i=0; i<10; i++) {
         //创建一个空白页
         PDPage blankPage = new PDPage();

         //将空白页添加到文档中
         document.addPage( blankPage );
      } 
     
      //保存文档
      document.save("C:/PdfBox_Examples/my_doc.pdf");
      System.out.println("PDF created");
      
      //关闭文档
      document.close();

   }  
} 

使用以下命令从命令提示符编译并执行保存的 Java 文件 −

javac Adding_pages.java
java Adding_pages

执行后,上述程序将创建一个空白页的 PDF 文档,并显示以下消息 −

PDF created 

如果验证指定的路径,则可以找到创建的 PDF 文档,如以下屏幕截图所示。

创建文档

PDFBox - 加载文档

在前面的示例中,您已经了解了如何创建新文档并向其中添加页面。本章将教您如何加载系统中已存在的 PDF 文档并对其执行一些操作。

加载现有 PDF 文档

PDDocument 类的 load() 方法用于加载现有 PDF 文档。请按照以下步骤加载现有 PDF 文档。

步骤 1:加载现有 PDF 文档

使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。

File file = new File("path of the document") 
PDDocument.load(file);

步骤 2:执行所需操作

执行所需操作,例如向已加载的文档添加页面、添加文本、添加图像。

步骤 3:保存文档

添加所有页面后,使用 PDDocument 类的 save() 方法保存 PDF 文档,如以下代码块所示。

document.save("Path");

步骤 4:关闭文档

最后使用 PDDocument 类的 close() 方法关闭文档,如下所示。

document.close();

示例

假设我们有一个 PDF 文档,其中包含一个页面,路径为 C:/PdfBox_Examples/,如以下屏幕截图所示。

Loading Document

此示例演示如何加载现有 PDF 文档。这里,我们将加载上面显示的 PDF 文档 sample.pdf,向其中添加一个页面,并将其保存在同一路径下,且名称相同。

步骤 1 − 将此代码保存在名为 LoadingExistingDocument.java 的文件中。

import java.io.File;
import java.io.IOException;
 
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDPage;
public class LoadingExistingDocument {

   public static void main(String args[]) throws IOException {
   
      //加载现有文档 
      File file = new File("C:/PdfBox_Examples/sample.pdf"); 
      PDDocument document = PDDocument.load(file); 
        
      System.out.println("PDF loaded"); 
        
      //向文档添加空白页 
      document.addPage(new PDPage());  

      //保存文档 
      document.save("C:/PdfBox_Examples/sample.pdf");

      //关闭文档  
      document.close(); 
        
   }  
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件

javac LoadingExistingDocument.java
java LoadingExistingDocument

执行后,上述程序将加载指定的 PDF 文档并向其添加一个空白页,显示以下消息。

PDF loaded

如果验证指定的路径,您可以找到添加到指定 PDF 文档的附加页面,如下所示。

文档中的附加页面

PDFBox - 删除页面

现在让我们学习如何从 PDF 文档中删除页面。

从现有文档中删除页面

您可以使用 PDDocument 类的 removePage() 方法从现有 PDF 文档中删除页面。

步骤 1:加载现有 PDF 文档

使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。

File file = new File("文档路径")
PDDocument.load(file);

步骤 2:列出页数

您可以使用 getNumberOfPages() 方法列出 PDF 文档中存在的页数,如下所示。

int noOfPages= document.getNumberOfPages();
System.out.print(noOfPages);

步骤 3:删除页面

您可以使用 PDDocument 类的 removePage() 方法从 PDF 文档中删除页面。对于此方法,您需要传递要删除的页面的索引。

在指定 PDF 文档中页面的索引时,请记住这些页面的索引从零开始,即,如果您要删除第 1 页,则索引值需要为 0。

document.removePage(2);

步骤 4:保存文档

删除页面后,使用 PDDocument 类的 save() 方法保存 PDF 文档,如以下代码块所示。

document.save("Path");

步骤 5:关闭文档

最后,使用 PDDocument 类的 close() 方法关闭文档,如下所示。

document.close();

示例

假设我们有一个名为 sample.pdf 的 PDF 文档,其中包含三个空白页,如下所示。

Removing page before

此示例演示如何从现有 PDF 文档中删除页面。在这里,我们将加载上面指定的名为 sample.pdf 的 PDF 文档,从中删除一页,并将其保存在路径 C:/PdfBox_Examples/ 中。将此代码保存在名为 Removing_pages.java 的文件中。

import java.io.File;
import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;

public class RemovingPages {

   public static void main(String args[]) throws IOException {

        //加载现有文档
        File file = new File("C:/PdfBox_Examples/sample.pdf");
        PDDocument document = PDDocument.load(file);
        
        //列出现有页面的数量
        int noOfPages= document.getNumberOfPages();
        System.out.print(noOfPages);
        
        //删除页面
        document.removePage(2);
        
        System.out.println("page removed");
        
        //保存文档
        document.save("C:/PdfBox_Examples/sample.pdf");
        
        //关闭文档
        document.close();

   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac RemovingPages.java
java RemovingPages

执行后,上述程序会创建一个包含空白页的 PDF 文档,并显示以下消息。

3
page removed

如果验证指定的路径,您会发现所需页面已被删除,文档中仅剩下两页,如下所示。

Removing page after

PDFBox - 文档属性

与其他文件一样,PDF 文档也具有文档属性。这些属性是键值对。每个属性都提供有关文档的特定信息。

以下是 PDF 文档的属性 −

S.No. 属性 &描述
1

File

此属性保存文件的名称。

2

Title

使用此属性,您可以设置文档的标题。

3

Author

使用此属性,您可以设置文档作者的姓名。

4

Subject

使用此属性,您可以指定 PDF 文档的主题。

5

Keywords

使用此属性,您可以列出我们可以搜索文档的关键字。

6

Created

使用此属性,您可以设置文档的创建日期。

7

Modified

使用此属性,您可以设置文档的修改日期。

8

Application

使用此属性,您可以设置文档的应用程序。

以下是 PDF 文档的文档属性表的屏幕截图。

PDF properties

设置文档属性

PDFBox 为您提供了一个名为 PDDocumentInformation 的类。此类具有一组 setter 和 getter 方法。

此类的 setter 方法用于将值设置为文档的各种属性,getter 方法用于检索这些值。

以下是 PDDocumentInformation 类的 setter 方法。

S.No. 方法 &描述
1

setAuthor(String author)

此方法用于设置 PDF 文档名为 Author 的属性的值。

2

setTitle(String title)

此方法用于设置 PDF 文档名为 Title 的属性的值。

3

setCreator(String creator)

此方法用于设置 PDF 文档中名为 Creator 的属性的值。

4

setSubject(String subject)

此方法用于设置 PDF 文档中名为 Subject 的属性的值。

5

setCreationDate(Calendar date)

此方法用于设置 PDF 文档中名为 CreationDate 的属性的值。

6

setModificationDate(Calendar date)

此方法用于设置 PDF 文档的属性 ModificationDate 的值。

7

setKeywords(String keywords list)

此方法用于设置 PDF 文档中名为 Keywords 的属性的值。

示例

PDFBox 提供了一个名为 PDDocumentInformation 的类,该类提供了各种方法。这些方法可以设置文档的各种属性并检索它们。

此示例演示如何向 PDF 文档添加 Author、Title、Date 和 Subject 等属性。在这里,我们将创建一个名为 doc_attributes.pdf 的 PDF 文档,向其添加各种属性,并将其保存在路径 C:/PdfBox_Examples/ 中。将此代码保存在名为添加属性.java.

import java.io.IOException; 
import java.util.Calendar; 
import java.util.GregorianCalendar;
  
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.PDPage;

public class AddingDocumentAttributes {
   public static void main(String args[]) throws IOException {

        //创建 PDF 文档对象
        PDDocument document = new PDDocument();
        
        //创建空白页
        PDPage blankPage = new PDPage();
        
        //将空白页添加到文档
        document.addPage( blankPage );
        
        //创建 PDDocumentInformation 对象
        PDDocumentInformation pdd = document.getDocumentInformation();
        
        //设置文档的作者
        pdd.setAuthor("Tutorialspoint");
        
        //设置文档的标题
        pdd.setTitle("Sample document");
        
        //设置文档的创建者
        pdd.setCreator("PDF Examples");
        
        //设置文档的主题
        pdd.setSubject("Example document");
        
        //设置文档的创建日期
        Calendar date = new GregorianCalendar();
        date.set(2015, 11, 5);
        pdd.setCreationDate(date);
        //设置文档的修改日期
        date.set(2016, 6, 5);
        pdd.setModificationDate(date);
        
        //设置文档的关键字
        pdd.setKeywords("sample, first example, my pdf"); 
        
        //保存文档 
        document.save("C:/PdfBox_Examples/doc_attributes.pdf");
        
        System.out.println("Properties added successfully ");
        
        //关闭文档
        document.close();

   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac AddingAttributes.java
java AddingAttributes

执行后,上述程序将所有指定的属性添加到文档中,并显示以下消息。

Properties added successfully

现在,如果您访问给定的路径,您可以找到在其中创建的 PDF。右键单击文档并选择文档属性选项,如下所示。

文档属性

这将为您提供文档属性窗口,在这里您可以观察到文档的所有属性都设置为指定值。

属性菜单

检索文档属性

您可以使用 PDDocumentInformation 类提供的 getter 方法检索文档的属性。

以下是 PDDocumentInformation 类的 getter 方法。

S.No. 方法 &描述
1

getAuthor()

此方法用于检索 PDF 文档中名为 Author 的属性的值。

2

getTitle()

此方法用于检索 PDF 文档中名为 Title 的属性的值。

3

getCreator()

此方法用于检索PDF 文档的名为 Creator 的属性。

4

getSubject()

此方法用于检索 PDF 文档的名为 Subject 的属性的值。

5

getCreationDate()

此方法用于检索 PDF 文档的名为 CreationDate 的属性的值。

6

getModificationDate()

此方法用于检索 PDF 文档中名为 ModificationDate 的属性的值。

7

getKeywords()

此方法用于检索 PDF 文档中名为 Keywords 的属性的值。

示例

此示例演示如何检索现有 PDF 文档的属性。在这里,我们将创建一个 Java 程序并加载名为 doc_attributes.pdf 的 PDF 文档(保存在路径 C:/PdfBox_Examples/ 中),并检索其属性。将此代码保存在名为 RetrivingDocumentAttributes.java 的文件中。

import java.io.File; 
import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDDocumentInformation;

public class RetrivingDocumentAttributes {
   public static void main(String args[]) throws IOException {
      
        //加载现有文档 
        File file = new File("C:/PdfBox_Examples/doc_attributes.pdf")
        PDDocument document = PDDocument.load(file);
        //获取 PDDocumentInformation 对象
        PDDocumentInformation pdd = document.getDocumentInformation();
        
        //检索 PDF 文档的信息    
        System.out.println("Author of the document is :"+ pdd.getAuthor());
        System.out.println("Title of the document is :"+ pdd.getTitle());
        System.out.println("Subject of the document is :"+ pdd.getSubject());
        
        System.out.println("Creator of the document is :"+ pdd.getCreator());
        System.out.println("Creation date of the document is :"+ pdd.getCreationDate());
        System.out.println("Modification date of the document is :"+ 
         pdd.getModificationDate()); 
        System.out.println("Keywords of the document are :"+ pdd.getKeywords()); 
        
        //关闭文档 
        document.close();        
   }  
}      

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac RetrivingDocumentAttributes.java
java RetrivingDocumentAttributes

执行后,上述程序将检索文档的所有属性并显示它们,如下所示。

Author of the document is :Tutorialspoint 
Title of the document is :Sample document 
Subject of the document is :Example document 
Creator of the document is :PDF Examples 
Creation date of the document is :11/5/2015
Modification date of the document is :6/5/2016
Keywords of the document are :sample, first example, my pdf

PDFBox - 添加文本

在上一章中,我们讨论了如何向 PDF 文档添加页面。在本章中,我们将讨论如何向现有 PDF 文档添加文本。

向现有 PDF 文档添加文本

您可以使用 PDFBox 库向文档添加内容,它为您提供了一个名为 PDPageContentStream 的类,其中包含在 PDFDocument 页面中插入文本、图像和其他类型内容所需的方法。

以下是创建空文档并向其中的页面添加内容的步骤。

步骤 1:加载现有文档

您可以使用 PDDocument 类的 load() 方法加载现有文档。因此,实例化此类并加载所需的文档,如下所示。

File file = new File("文档路径");
PDDocument doc = document.load(file);

步骤 2:获取所需页面

您可以使用 getPage() 方法获取文档中所需的页面。通过将所需页面的索引传递给此方法,检索所需页面的对象,如下所示。

PDPage page = doc.getPage(1);

步骤 3:准备内容流

您可以使用类 PDPageContentStream 的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递前面步骤中创建的这两个对象来实例化此类,如下所示。

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

步骤 4:开始文本

在 PDF 文档中插入文本时,您可以使用 PDPageContentStream 类的 beginText() 和 endText() 方法指定文本的起点和终点,如下所示。

contentStream.beginText(); 
……………………….. 
code to add text content 
……………………….. 
contentStream.endText();

因此,使用 beginText() 方法开始文本,如下所示。

contentStream.beginText();

步骤 5:设置文本的位置

使用 newLineAtOffset() 方法,您可以设置页面中内容流的位置。

//设置行的位置
contentStream.newLineAtOffset(25, 700);

步骤 6:设置字体

您可以使用 PDPageContentStream 类的 setFont() 方法将文本的字体设置为所需的样式,如下所示。您需要向此方法传递字体的类型和大小。

contentStream.setFont( font_type, font_size );

步骤 7:插入文本

您可以使用 PDPageContentStream 类的 ShowText() 方法将文本插入页面,如下所示。此方法以字符串形式接受所需的文本。

contentStream.showText(text);

步骤 8:结束文本

插入文本后,您需要使用 PDPageContentStream 类的 endText() 方法结束文本,如下所示。

contentStream.endText();

步骤 9:关闭 PDPageContentStream

使用 close() 方法关闭 PDPageContentStream 对象,如下所示。

contentstream.close();

步骤 10:保存文档

添加所需内容后,使用 PDDocument 类的 save() 方法保存 PDF 文档,如以下代码块所示。

doc.save("Path");

步骤 11:关闭文档

最后,使用 PDDocument 类的 close() 方法关闭文档,如下所示。

doc.close();

示例

此示例演示如何向文档中的页面添加内容。在这里,我们将创建一个 Java 程序来加载名为 my_doc.pdf 的 PDF 文档,该文档保存在路径 C:/PdfBox_Examples/ 中,并向其中添加一些文本。将此代码保存在名为 AddingContent.java 的文件中。

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 AddingContent {
   public static void main (String args[]) throws IOException {

        //加载现有文档
        File file = new File("C:/PdfBox_Examples/my_doc.pdf");
        PDDocument document = PDDocument.load(file);
        
        //获取文档页面
        PDPage page = document.getPage(1);
        PDPageContentStream contentStream = new PDPageContentStream(document, page);
        
        //开始内容流
        contentStream.beginText();
        
        //设置内容流的字体
        contentStream.setFont(PDType1Font.TIMES_ROMAN, 12);
        
        //设置行的位置
        contentStream.newLineAtOffset(25, 500);
        
        String text = "这是示例文档,我们正在向其中添加内容。";
        
        //以字符串形式添加文本
        contentStream.showText(text);
        
        //结束内容流
        contentStream.endText();
        
        System.out.println("内容已添加");
        
        //关闭内容流
        contentStream.close();
        
        //保存文档
        document.save(new File("C:/PdfBox_Examples/new.pdf"));
        
        //关闭文档
        document.close();

   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac AddingContent.java
java AddingContent

执行后,上述程序将给定的文本添加到文档并显示以下消息。

Content added

如果您在指定路径中验证 PDF 文档 new.pdf,您可以观察到给定的内容已添加到文档中,如下所示。

添加文本

PDFBox - 添加多行

在上一章提供的示例中,我们讨论了如何向 PDF 中的页面添加文本,但通过此程序,您只能添加一行中可容纳的文本。如果您尝试添加更多内容,则不会显示超出行空间的所有文本。

例如,如果您通过传递以下字符串来执行上一章中的上述程序,则只会显示其中的一部分。

String text = "This is an example of adding text to a page in the pdf document. we can
   add as many lines as we want like this using the showText() method of the 
   ContentStream class";

将上一章例子中的字符串文本替换为上面提到的字符串并执行。执行后,您将收到以下输出。

Single line extended

如果仔细观察输出,您会注意到只显示了字符串的一部分。

为了向 PDF 添加多行,您需要使用 setLeading() 方法设置行距,并在完成每行后使用 newline() 方法转到新行。

步骤

以下是创建空文档并将内容添加到其中的页面的步骤。

步骤 1:加载现有文档

您可以使用 PDDocument 类的 load() 方法加载现有文档。因此,实例化此类并加载所需的文档,如下所示。

File file = new File("文档路径");
PDDocument doc = PDDocument.load(file);

步骤 2:获取所需页面

您可以使用 getPage() 方法获取文档中所需的页面。通过将所需页面的索引传递给此方法,检索所需页面的对象,如下所示。

PDPage page = doc.getPage(1);

步骤 3:准备内容流

您可以使用名为 PDPageContentStream 的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递在前面步骤中创建的这两个对象来实例化此类,如下所示。

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

步骤 4:开始文本

在 PDF 文档中插入文本时,您可以使用 PDPageContentStream 类的 beginText()endText() 方法指定文本的起点和终点,如下所示。

contentStream.beginText(); 
……………………….. 
code to add text content 
……………………….. 
contentStream.endText(); 

因此,使用 beginText() 方法开始文本,如下所示。

contentStream.beginText();

步骤 5:设置文本的位置

使用 newLineAtOffset() 方法,您可以设置页面中内容流的位置。

//设置行的位置
contentStream.newLineAtOffset(25, 700);

步骤 6:设置字体

您可以使用 PDPageContentStream 类的 setFont() 方法将文本的字体设置为所需的样式,如下所示。您需要向此方法传递字体的类型和大小。

contentStream.setFont( font_type, font_size );

步骤 7:设置文本行距

您可以使用 setLeading() 方法设置文本行距,如下所示。

contentStream.setLeading(14.5f);

步骤 8:使用 newline() 插入多个字符串

您可以使用 PDPageContentStream 类的 ShowText() 方法插入多个字符串,方法是使用 newline() 方法划分每个字符串,如下所示。

contentStream. ShowText(text1);
contentStream.newLine();
contentStream. ShowText(text2);

步骤 9:结束文本

插入文本后,您需要使用 PDPageContentStream 类的 endText() 方法结束文本,如下所示。

contentStream.endText();

步骤 10:关闭 PDPageContentStream

使用 close() 方法关闭 PDPageContentStream 对象,如下所示。

contentstream.close();

步骤 11:保存文档

添加所需内容后,使用 PDDocument 类的 save() 方法保存 PDF 文档,如以下代码块所示。

doc.save("Path");

步骤 12:关闭文档

最后,使用 PDDocument 类的 close() 方法关闭文档,如下所示。

doc.close();

示例

此示例演示如何使用 PDFBox 在 PDF 中添加多行。将此程序保存在名为 AddMultipleLines.java 的文件中。

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 AddMultipleLines {
   public static void main(String args[]) throws IOException {

        //加载现有文档
        File file = new File("C:/PdfBox_Examples/my_pdf.pdf");
        PDDocument doc = document.load(file);
        
        //创建 PDF 文档
        PDPage page = doc.getPage(1);
        
        PDPageContentStream contentStream = new PDPageContentStream(doc, page);
        
        //开始内容流
        contentStream.beginText();
        
        //将字体设置为内容流
        contentStream.setFont( PDType1Font.TIMES_ROMAN, 16 );
        
        //设置行距
        contentStream.setLeading(14.5f);
        
        //设置行的位置
        contentStream.newLineAtOffset(25, 725);
        
        String text1 = "This is an example of adding text to a page in the pdf document.
        we can add as many lines";
        String text2 = "as we want like this using the ShowText()  method of the
        ContentStream class";
        
        //以字符串形式添加文本
        contentStream. ShowText(text1);
        contentStream.newLine();
        contentStream. ShowText(text2);
        //结束内容流
        contentStream.endText();
        
        System.out.println("Content added");
        
        //关闭内容流
        contentStream.close();
        
        //保存文档
        doc.save(new File("C:/PdfBox_Examples/new.pdf"));
        
        //关闭文档
        doc.close();
   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac AddMultipleLines.java
java AddMultipleLines

执行后,上述程序将给定的文本添加到文档中并显示以下消息。

Content added

如果您验证指定路径中的 PDF 文档 new.pdf,则可以观察到给定的内容以多行形式添加到文档中,如下所示。

Adding multiplelines

PDFBox - 读取文本

在上一章中,我们了解了如何将文本添加到现有 PDF 文档。在本章中,我们将讨论如何从现有 PDF 文档中读取文本。

从现有 PDF 文档中提取文本

提取文本是 PDF 框库的主要功能之一。您可以使用 PDFTextStripper 类的 getText() 方法提取文本。此类从给定的 PDF 文档中提取所有文本。

以下是从现有 PDF 文档中提取文本的步骤。

步骤 1:加载现有 PDF 文档

使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。

File file = new File("path of the document")
PDDocument document = PDDocument.load(file);

步骤 2:实例化 PDFTextStripper 类

PDFTextStripper 类提供从 PDF 文档中检索文本的方法,因此,请按如下所示实例化此类。

PDFTextStripper pdfStripper = new PDFTextStripper();

步骤 3:检索文本

您可以使用 PDFTextStripper 类的 getText() 方法从 PDF 文档中读取/检索页面的内容。您需要将文档对象作为参数传递给此方法。此方法检索给定文档中的文本并以 String 对象的形式返回它。

String text = pdfStripper.getText(document);

步骤 4:关闭文档

最后,使用 PDDocument 类的 close() 方法关闭文档,如下所示。

document.close();

示例

假设我们有一个 PDF 文档,其中包含一些文本,如下所示。

Example PDF

此示例演示如何从上述 PDF 文档中读取文本。在这里,我们将创建一个 Java 程序并加载一个名为 new.pdf 的 PDF 文档,该文档保存在路径 C:/PdfBox_Examples/ 中。将此代码保存在名为 ReadingText.java 的文件中。

import java.io.File;
import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
public class ReadingText {

   public static void main(String args[]) throws IOException {

        //加载现有文档
        File file = new File("C:/PdfBox_Examples/new.pdf");
        PDDocument document = PDDocument.load(file);
        
        //实例化 PDFTextStripper 类
        PDFTextStripper pdfStripper = new PDFTextStripper();
        
        //从 PDF 文档中检索文本
        String text = pdfStripper.getText(document);
        System.out.println(text);
        
        //关闭文档
        document.close();

   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac ReadingText.java
java ReadingText

执行后,上述程序从给定的 PDF 文档中检索文本并显示它,如下所示。

This is an example of adding text to a page in the pdf document. we can add as many lines
as we want like this using the ShowText() method of the ContentStream class.

PDFBox - 插入图像

在上一章中,我们了解了如何从现有 PDF 文档中提取文本。在本章中,我们将讨论如何将图像插入 PDF 文档。

将图像插入 PDF 文档

您可以分别使用 PDImageXObject 类和 PDPageContentStream 类的 createFromFile()drawImage() 方法将图像插入 PDF 文档。

以下是从现有 PDF 文档中提取文本的步骤。

步骤 1:加载现有 PDF 文档

使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。

File file = new File("path of the document")
PDDocument doc = PDDocument.load(file);

步骤 2:检索页面

选择 PDF 文档中的页面并使用 getPage() 方法检索其页面对象,如下所示。

PDPage page = doc.getPage(0);

步骤 3:创建 PDImageXObject 对象

PDFBox 库中的 PDImageXObject 类表示图像。它提供了执行与图像相关的操作所需的所有方法,例如插入图像、设置其高度、设置其宽度等。

我们可以使用方法 createFromFile() 创建此类的对象。对于此方法,我们需要以字符串形式传递要添加的图像的路径以及需要添加图像的文档对象。

PDImageXObject pdImage = PDImageXObject.createFromFile("C:/logo.png", doc);

步骤 4:准备内容流

您可以使用名为 PDPageContentStream 的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递在前面步骤中创建的这两个对象来实例化此类,如下所示。

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

步骤 5:在 PDF 文档中绘制图像

您可以使用 drawImage() 方法在 PDF 文档中插入图像。在此方法中,您需要添加上一步中创建的图像对象以及图像所需的尺寸(宽度和高度),如下所示。

contentstream.drawImage(pdImage, 70, 250);

步骤 6:关闭 PDPageContentStream

使用 close() 方法关闭 PDPageContentStream 对象,如下所示。

contentstream.close();

步骤 7:保存文档

添加所需内容后,使用 PDDocument 类的 save() 方法保存 PDF 文档,如以下代码块所示。

doc.save("Path");

步骤 8:关闭文档

最后,使用 PDDocument 类的 close() 方法关闭文档,如下所示。

doc.close();

示例

假设我们有一个名为 sample.pdf 的 PDF 文档,位于路径 C:/PdfBox_Examples/ 中,其中包含空白页,如下所示。

Sample document

此示例演示如何将图像添加到上述 PDF 文档的空白页。在这里,我们将加载名为 sample.pdf 的 PDF 文档并向其中添加图像。将此代码保存在名为 InsertingImage.java 的文件中。

import java.io.File;
  
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

public class InsertingImage {

   public static void main(String args[]) throws Exception {
        //加载现有文档
        File file = new File("C:/PdfBox_Examples/sample.pdf");
        PDDocument doc = PDDocument.load(file);
        
        //检索页面
        PDPage page = doc.getPage(0);
        
        //创建 PDImageXObject 对象
        PDImageXObject pdImage = PDImageXObject.createFromFile("C:/PdfBox_Examples/logo.png",doc);
        
        //创建 PDPageContentStream 对象
        PDPageContentStream content = new PDPageContentStream(doc, page);
        
        //在 PDF 文档中绘制图像
        content.drawImage(pdImage, 70, 250);
        
        System.out.println("已插入图像");
        
        //关闭 PDPageContentStream 对象
        contents.close();		
        
        //保存文档
        doc.save("C:/PdfBox_Examples/sample.pdf");
            
        //关闭文档
        doc.close();
     
   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac InsertingImage.java
java InsertingImage

执行后,上述程序会将图像插入给定 PDF 文档的指定页面,并显示以下消息。

Image inserted

如果您验证文档 sample.pdf,您可以观察到其中插入了一张图片,如下所示。

插入图像

PDFBox - 加密 PDF 文档

在上一章中,我们了解了如何在 PDF 文档中插入图像。在本章中,我们将讨论如何加密 PDF 文档。

加密 PDF 文档

您可以使用 StandardProtectionPolicyAccessPermission 类 提供的方法加密 PDF 文档。

AccessPermission 类用于通过为 PDF 文档分配访问权限来保护它。使用此类,您可以限制用户执行以下操作。

  • 打印文档
  • 修改文档内容
  • 复制或提取文档内容
  • 添加或修改注释
  • 填写交互式表单字段
  • 提取文本和图形,方便视障人士使用
  • 组装文档
  • 以降级质量打印

StandardProtectionPolicy 类用于为文档添加基于密码的保护。

以下是加密现有 PDF 文档的步骤。

步骤 1:加载现有 PDF 文档

使用 的静态方法 load() 加载现有 PDF 文档PDDocument 类。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。

File file = new File("path of the document") 
PDDocument document = PDDocument.load(file);

步骤 2:创建访问权限对象

实例化 AccessPermission 类,如下所示。

AccessPermission accessPermission = new AccessPermission();

步骤 3:创建 StandardProtectionPolicy 对象

通过传递所有者密码、用户密码和 AccessPermission 对象来实例化 StandardProtectionPolicy 类,如下所示。

StandardProtectionPolicy spp = new StandardProtectionPolicy("1234","1234",accessPermission);

步骤 4:设置加密密钥的长度

使用 setEncryptionKeyLength() 方法设置加密密钥长度,如下所示。

spp.setEncryptionKeyLength(128);

步骤 5:设置权限

使用 StandardProtectionPolicy 类的 setPermissions() 方法设置权限。此方法接受 AccessPermission 对象作为参数。

spp.setPermissions(accessPermission);

步骤 6:保护文档

您可以使用 PDDocument 类的 protect() 方法保护文档,如下所示。将 StandardProtectionPolicy 对象作为参数传递给此方法。

document.protect(spp);

步骤 7:保存文档

添加所需内容后,使用 PDDocument 类的 save() 方法保存 PDF 文档,如以下代码块所示。

document.save("Path");

步骤 8:关闭文档

最后,使用 PDDocument 类的 close() 方法关闭文档,如下所示。

document.close();

示例

假设,我们有一个名为 sample.pdf 的 PDF 文档,位于路径 C:/PdfBox_Examples/,其中有空白页,如下所示。

Sample Document

此示例演示如何加密上述 PDF 文档。在这里,我们将加载名为 sample.pdf 的 PDF 文档并对其进行加密。将此代码保存在名为 EncriptingPDF.java.

的文件中。
import java.io.File;
 
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
public class EncriptingPDF {
  
   public static void main(String args[]) throws Exception {
        //加载现有文档
        File file = new File("C:/PdfBox_Examples/sample.pdf");
        PDDocument document = PDDocument.load(file);
        
        //创建访问权限对象
        AccessPermission ap = new AccessPermission();
        
        //创建 StandardProtectionPolicy 对象
        StandardProtectionPolicy spp = new StandardProtectionPolicy("1234", "1234", ap);
        
        //设置加密密钥的长度
        spp.setEncryptionKeyLength(128);
        
        //设置访问权限
        spp.setPermissions(ap);
        
        //保护文档
        document.protect(spp);
        
        System.out.println("Document encrypted");
        
        //保存文档
        document.save("C:/PdfBox_Examples/sample.pdf");
        //关闭文档
        document.close();

   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac EncriptingPDF.java
java EncriptingPDF

执行后,上述程序将加密给定的 PDF 文档,并显示以下消息。

Document encrypted

如果您尝试打开文档 sample.pdf,则无法打开,因为它已加密。相反,它会提示您输入密码以打开文档,如下所示。

文档加密

PDFBox - PDF 文档中的 JavaScript

在上一章中,我们学习了如何将图像插入 PDF 文档。在本章中,我们将讨论如何将 JavaScript 添加到 PDF 文档。

将 JavaScript 添加到 PDF 文档

您可以使用 PDActionJavaScript 类将 JavaScript 操作添加到 PDF 文档。这代表一个 JavaScript 操作。

以下是将 JavaScript 操作添加到现有 PDF 文档的步骤。

步骤 1:加载现有 PDF 文档

使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。

File file = new File("path of the document")
PDDocument document = PDDocument.load(file);

步骤 2:创建 PDActionJavaScript 对象

实例化 PDActionJavaScript 对象,如下所示。向此类的构造函数传递所需的 JavaScript,形式为字符串,如下所示。

String javaScript = "app.alert( {cMsg: 'this is an example', nIcon: 3,"
+ " nType: 0,cTitle: 'PDFBox Javascript example' } );";
PDActionJavaScript PDAjavascript = new PDActionJavaScript(javaScript);

步骤 3:在文档中嵌入 Java 脚本

将所需字符串嵌入 PDF 文档,如下所示。

document.getDocumentCatalog().setOpenAction(PDAjavascript);

步骤 4:保存文档

添加所需内容后,使用 PDDocument 类的 save() 方法保存 PDF 文档,如以下代码块所示。

document.save("Path");

步骤 5:关闭文档

最后,使用 PDDocument 类的 close() 方法关闭文档,如下所示。

document.close();

示例

假设,我们有一个名为 sample.pdf 的 PDF 文档,位于路径 C:/PdfBox_Examples/,其中有空白页,如下所示。

Sample Document

此示例演示如何将 JavaScript 嵌入上述 PDF 文档中。在这里,我们将加载名为 sample.pdf 的 PDF 文档并在其中嵌入 JavaScript。将此代码保存在名为 AddJavaScript.java.

的文件中。
import java.io.File;
  
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.interactive.action.PDActionJavaScript;

public class AddJavaScript {

   public static void main(String args[]) throws Exception {

        //加载现有文件
        File file = new File("C:/PdfBox_Examples/new.pdf");
        PDDocument document = PDDocument.load(file);
        
        String javaScript = "app.alert( {cMsg: 'this is an example', nIcon: 3,"
        + " nType: 0, cTitle: 'PDFBox Javascript example'} );";
        
        //创建 PDActionJavaScript 对象
        PDActionJavaScript PDAjavascript = new PDActionJavaScript(javaScript);
        
        //嵌入 java 脚本
        document.getDocumentCatalog().setOpenAction(PDAjavascript);
        
        //保存文档
        document.save( new File("C:/PdfBox_Examples/new.pdf") );
        System.out.println("Data added to the given PDF"); 
        
        //关闭文档
        document.close();

   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac AddJavaScript.java
java AddJavaScript

执行后,上述程序将 JavaScript 嵌入给定的 PDF 文档中,并显示以下消息。

Data added to the given PDF

如果您尝试打开文档 new.pdf,它将显示一条警告消息,如下所示。

Adding javascript

PDFBox - 拆分 PDF 文档

在上一章中,我们了解了如何将 JavaScript 添加到 PDF 文档。现在让我们学习如何将给定的 PDF 文档拆分为多个文档。

拆分 PDF 文档中的页面

您可以使用名为 Splitter 的类将给定的 PDF 文档拆分为多个 PDF 文档。此类用于将给定的 PDF 文档拆分为几个其他文档。

以下是拆分现有 PDF 文档的步骤

步骤 1:加载现有 PDF 文档

使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。

File file = new File("文档路径")
PDDocument document = PDDocument.load(file);

步骤 2:实例化 Splitter 类

名为 Splitter 的类包含拆分给定 PDF 文档的方法,因此,实例化此类,如下所示。

Splitter splitter = new Splitter();

步骤 3:拆分 PDF 文档

您可以使用 Splitter 类的 Split() 方法拆分给定的文档。此方法接受 PDDocument 类的对象作为参数。

List<PDDocument> Pages = splitter.split(document);

split() 方法将给定文档的每一页拆分为单独的文档,并以列表的形式返回所有这些文档。

步骤 4:创建迭代器对象

为了遍历文档列表,您需要获取上一步获取的列表的迭代器对象,您需要使用 listIterator() 方法获取列表的迭代器对象,如下所示。

Iterator<PDDocument> iterator = Pages.listIterator();

步骤 5:关闭文档

最后,使用 PDDocument 类的 close() 方法关闭文档,如下所示。

document.close();

示例

假设,在路径 C:\PdfBox_Examples\ 中有一个名为 sample.pdf 的 PDF 文档,该文档包含两页 — 一页包含图像,另一页包含文本,如下所示。

拆分页面

此示例演示如何拆分上述 PDF 文档。在这里,我们将把名为 sample.pdf 的 PDF 文档拆分为两个不同的文档 sample1.pdfsample2.pdf。将此代码保存在名为 SplitPages.java 的文件中。

import org.apache.pdfbox.multipdf.Splitter; 
import org.apache.pdfbox.pdmodel.PDDocument;

import java.io.File; 
import java.io.IOException; 
import java.util.List; 
import java.util.Iterator;
  
public class SplitPages {
   public static void main(String[] args) throws IOException {

        //加载现有 PDF 文档
        File file = new File("C:/PdfBox_Examples/sample.pdf");
        PDDocument document = PDDocument.load(file);
        
        //实例化 Splitter 类
        Splitter splitter = new Splitter();
        
        //拆分 PDF 文档的页面
        List<PDDocument> Pages = splitter.split(document);
        
        //创建迭代器
        Iterator<PDDocument> iterator = Pages.listIterator();
        
        //将每页保存为单独的文档
        int i = 1;
        while(iterator.hasNext()) {
         PDDocument pd = iterator.next();
         pd.save("C:/PdfBox_Examples/sample"+ i++ +".pdf");
        }
        System.out.println("Multiple PDF's created");
        document.close();
   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件

javac SplitPages.java
java SplitPages

执行后,上述程序将加密给定的 PDF 文档,并显示以下消息。

Multiple PDF's created

如果验证给定的路径,您可以观察到创建了多个 PDF,名称分别为 sample1sample2,如下所示。

Split First Split Second

PDFBox - 合并多个 PDF 文档

在上一章中,我们了解了如何将给定的 PDF 文档拆分为多个文档。现在让我们学习如何将多个 PDF 文档合并为一个文档。

合并多个 PDF 文档

您可以使用名为 PDFMergerUtility 的类将多个 PDF 文档合并为一个 PDF 文档,此类提供将两个或多个 PDF 文档合并为一个 PDF 文档的方法。

以下是合并多个 PDF 文档的步骤。

步骤 1:实例化 PDFMergerUtility 类

实例化合并实用程序类,如下所示。

PDFMergerUtility PDFmerger = new PDFMergerUtility();

步骤 2:设置目标文件

使用 setDestinationFileName() 方法设置目标文件,如下所示。

PDFmerger.setDestinationFileName("C:/PdfBox_Examples/data1/merged.pdf");

步骤 3:设置源文件

使用 addSource() 方法设置源文件,如下所示。

File file = new File("文档路径")
PDFmerger.addSource(file);

步骤 4:合并文档

使用 PDFmerger 类的 mergeDocuments() 方法合并文档,如下所示。

PDFmerger.mergeDocuments();

示例

假设我们有两个 PDF 文档 - sample1.pdfsample2.pdf,位于路径 C:\PdfBox_Examples\ 中,如下所示。

Image File.jpg Content File.jpg

此示例演示如何合并上述 PDF 文档。在这里,我们将名为 sample1.pdfsample2.pdf 的 PDF 文档合并为单个 PDF 文档 merged.pdf。将此代码保存在名为 MergePDFs.java 的文件中。

import org.apache.pdfbox.multipdf.PDFMergerUtility; 
import java.io.File; 
import java.io.IOException;
public class MergePDFs {
   public static void main(String[] args) throws IOException {
        File file1 = new File("C:\EXAMPLES\Demo1.pdf");
        File file2 = new File("C:\EXAMPLES\Demo2.pdf");
        
        //实例化 PDFMergerUtility 类
        PDFMergerUtility PDFmerger = new PDFMergerUtility();
        
        //设置目标文件
        PDFmerger.setDestinationFileName("C:\Examples\merged.pdf");
        
        //添加源文件
        PDFmerger.addSource(file1);
        PDFmerger.addSource(file2);
        
        //合并两个文档
        PDFmerger.mergeDocuments();
        System.out.println("文档已合并");
   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac MergePDFs.java
java MergePDFs

执行后,上述程序将加密给定的 PDF 文档并显示以下消息。

Documents merged

如果您验证给定的路径,您可以观察到创建了一个名为merged.pdf的PDF文档,其中包含两个源文档的页面,如下所示。

Merged

PDFBox - 将 PDF 转换为图像

在上一章中,我们了解了如何合并多个 PDF 文档。在本章中,我们将了解如何从 PDF 文档的一页中提取图像。

从 PDF 文档生成图像

PDFBox 库为您提供了一个名为 PDFRenderer 的类,它将 PDF 文档渲染为 AWT BufferedImage。

以下是从 PDF 文档生成图像的步骤。

步骤 1:加载现有 PDF 文档

使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。

File file = new File("文档路径")
PDDocument document = PDDocument.load(file);

步骤 2:实例化 PDFRenderer 类

名为 PDFRenderer 的类将 PDF 文档渲染为 AWT BufferedImage。因此,您需要实例化此类,如下所示。此类的构造函数接受文档对象;传递上一步中创建的文档对象,如下所示。

PDFRenderer renderer = new PDFRenderer(document);

步骤 3:从 PDF 文档渲染图像

您可以使用 Renderer 类的方法 renderImage() 在特定页面中渲染图像,您需要将要渲染图像的页面的索引传递给此方法。

BufferedImage image = renderer.renderImage(0);

步骤 4:将图像写入文件

您可以使用 write() 方法将上一步渲染的图像写入文件。对于此方法,您需要传递三个参数 −

  • 渲染的图像对象。
  • 表示图像类型的字符串(jpg 或 png)。
  • 您需要将提取的图像保存到的文件对象。
ImageIO.write(image, "JPEG", new File("C:/PdfBox_Examples/myimage.jpg"));

步骤 5:关闭文档

最后,使用 PDDocument 类的 close() 方法关闭文档,如下所示。

document.close();

示例

假设,我们在路径 C:\PdfBox_Examples\ 中有一个 PDF 文档 — sample.pdf,其第一页包含一张图片,如下所示。

Sample Image

此示例演示如何将上述 PDF 文档转换为图像文件。在这里,我们将检索 PDF 文档第一页中的图像并将其保存为 myimage.jpg。将此代码保存为 PdfToImage.java

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
public class PdfToImage {

   public static void main(String args[]) throws Exception {

        //加载现有 PDF 文档
        File file = new File("C:/PdfBox_Examples/sample.pdf");
        PDDocument document = PDDocument.load(file);
        
        //实例化 PDFRenderer 类
        PDFRenderer renderer = new PDFRenderer(document);
        
        //从 PDF 文档渲染图像
        BufferedImage image = renderer.renderImage(0);
        
        //将图像写入文件
        ImageIO.write(image, "JPEG", new File("C:/PdfBox_Examples/myimage.jpg"));
        
        System.out.println("Image created");
        
        //关闭文档
        document.close();

   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac PdfToImage.java
java PdfToImage

执行后,上述程序将检索给定 PDF 文档中的图像,并显示以下消息。

Image created

如果验证给定的路径,您可以观察到图像已生成并保存为 myimage.jpg,如下所示。

Generateimage

PDFBox - 添加矩形

本章将教您如何在 PDF 文档的页面中创建颜色框。

在 PDF 文档中创建框

您可以使用 PDPageContentStream 类的 addRect() 方法在 PDF 页面中添加矩形框。

以下是在 PDF 文档的页面中创建矩形形状的步骤。

步骤 1:加载现有 PDF 文档

使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。

File file = new File("path of the document")
PDDocument document = PDDocument.load(file);

步骤 2:获取页面对象

您需要使用 PDDocument 类的 getPage() 方法检索要添加矩形的所需页面的 PDPage 对象。您需要将要添加矩形的页面的索引传递给此方法。

PDPage page = document.getPage(0);

步骤 3:准备内容流

您可以使用名为 PDPageContentStream 的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递在前面步骤中创建的这两个对象来实例化此类,如下所示。

PDPageContentStream contentStream = new PDPageContentStream(document, page);

步骤 4:设置非描边颜色

您可以使用 PDPageContentStream 类的 setNonStrokingColor() 方法将非描边颜色设置为矩形。对于此方法,您需要将所需的颜色作为参数传递,如下所示。

contentStream.setNonStrokingColor(Color.DARK_GRAY);

步骤 5:绘制矩形

使用 addRect() 方法绘制具有所需尺寸的矩形。对于此方法,您需要传递要添加的矩形的尺寸,如下所示。

contentStream.addRect(200, 650, 100, 100);

步骤 6:填充矩形

PDPageContentStream 类的 fill() 方法使用所需颜色填充指定尺寸之间的路径,如下所示。

contentStream.fill();

步骤 7:关闭文档

最后使用 PDDocument 类的 close() 方法关闭文档,如下所示。

document.close();

示例

假设我们在路径 C:\PdfBox_Examples\ 中有一个名为 blankpage.pdf 的 PDF 文档,其中包含一个空白页,如下所示。

Blankpage

此示例演示如何在 PDF 文档中创建/插入矩形。在这里,我们将在空白 PDF 中创建一个框。将此代码保存为 AddRectangles.java

import java.awt.Color;
import java.io.File;
  
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
public class ShowColorBoxes {

   public static void main(String args[]) throws Exception {

        //加载现有文档
        File file = new File("C:/PdfBox_Examples/BlankPage.pdf");
        PDDocument document = PDDocument.load(file);
        
        //检索 PDF 文档的页面
        PDPage page = document.getPage(0);
        
        //实例化 PDPageContentStream 类
        PDPageContentStream contentStream = new PDPageContentStream(document, page);
        
        //设置非描边颜色
        contentStream.setNonStrokingColor(Color.DARK_GRAY);
        
        //绘制矩形
        contentStream.addRect(200, 650, 100, 100);
        
        //绘制矩形
        contentStream.fill();
        
        System.out.println("rectangle Added");
        
        //关闭 ContentStream 对象
        contentStream.close();
        
        //保存文档
        File file1 = new File("C:/PdfBox_Examples/colorbox.pdf");
        document.save(file1);
        
        //关闭文档
        document.close();
   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件。

javac AddRectangles.java
java AddRectangles

执行后,上述程序会在 PDF 文档中创建一个矩形,显示以下图像。

Rectangle created

如果您验证给定的路径并打开已保存的文档 — colorbox.pdf,您可以观察到其中插入了一个框,如下所示。

Coloredbox