Pdfbox 简明教程
PDFBox - Overview
可移植文档格式 (PDF) 是一种文件格式,有助于以独立于应用程序软件、硬件和操作系统的方式来显示数据。
每个 PDF 文件都包含固定版面平面文档的描述,包括显示该文档所需的文本、字体、图形和其他信息。
目前有几个库可供通过程序创建和处理 PDF 文档,例如:
-
Adobe PDF Library − 该库提供 C++、.NET 和 Java 等语言的 API,使用它,我们可以编辑、查看、打印并从 PDF 文档中提取文本。
-
Formatting Objects Processor − 开源打印格式程序,由 XSL 格式化对象和一个独立于输出的格式程序来驱动。主要输出目标是 PDF。
-
iText − 该库提供 Java、C# 和其他 .NET 语言的 API,使用该库,我们可以创建和处理 PDF、RTF 和 HTML 文档。
-
JasperReports − 这是一款 Java 报表工具,可生成 PDF 文档中的报表,包括 Microsoft Excel、RTF、ODT、逗号分隔值和 XML 文件。
What is a PDFBox
Apache PDFBox 是支持 PDF 文档的开发和转换的开源 Java 库。使用此库,您可以开发创建、转换和处理 PDF 文档的 Java 程序。
此外,PDFBox 还包括一个命令行实用程序,用于使用可用的 Jar 文件对 PDF 执行各种操作。
Features of PDFBox
以下是 PDFBox 值得注意的功能:
-
Extract Text − 使用 PDFBox,您可以从 PDF 文件中提取 Unicode 文本。
-
Split & Merge − 使用 PDFBox,您可以将一个 PDF 文件分成多个文件,并将其合并回单个文件。
-
Fill Forms − 使用 PDFBox,可以在文档中填写表单数据。
-
Print − 使用 PDFBox,可以使用标准 Java 打印 API 来打印 PDF 文件。
-
Save as Image − 使用 PDFBox,可以将 PDF 保存为图像文件,例如 PNG 或 JPEG。
-
Create PDFs − 使用 PDFBox,可以通过创建 Java 程序来创建新的 PDF 文件,也可以包括图片和字体。
-
Signing − 使用 PDFBox,可以给 PDF 文件添加数字签名。
PDFBox - Environment
Installing PDFBox
以下是下载 Apache PDFBox 的步骤 -
Step 1 − 通过单击以下链接打开 Apache PDFBox 的主页 − https://pdfbox.apache.org/
Step 2 − 上述链接会将您带到主页,如下面的屏幕截图所示 −
Step 3 − 现在,在上述屏幕截图中,单击 Downloads 链接。单击后,您将被导向 PDFBox 的下载页面,如下面的屏幕截图所示。
Step 4 − 在下载页面中,您将获得用于下载 PDFBox 的链接。单击相应链接,获取最新版本。比如,我们选择的是 PDFBox 2.0.1 ,单击后,您将被带到所需的 jar 文件,如下面的屏幕截图所示。
Step 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 Installation
下载必需的 jar 文件后,您需要将这些 JAR 文件嵌入到 Eclipse 环境中。您可以通过将构建路径设置为这些 JAR 文件并使用 pom.xml 来执行此操作。
Setting Build Path
以下是将 PDFBox 安装到 Eclipse 中所需的步骤 -
Step 1 − 确保在您的系统中安装了 Eclipse。如果没有,请下载并安装 Eclipse。
Step 2 − 打开 Eclipse,单击文件、新建,打开一个新项目,如下面的屏幕截图所示。
Step 3 − 选择项目后,您将获得 New Project 向导。在此向导中,选择 Java 项目,然后单击 Next 按钮,如下面的屏幕截图所示。
Step 4 − 继续前进后,您将被带到 New Java Project wizard 。创建一个新项目,然后单击 Next ,如下面的屏幕截图所示。
Step 5 − 创建新项目后,右键单击它;选择 Build Path 并单击 Configure Build Path… ,如下面的屏幕截图所示。
Step 6 − 单击 Build Path 选项后,您会被定向到 Java Build Path wizard 。 如以下屏幕截图所示,选择 Add External JARs 。
Step 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 。
Step 8 − 单击上述屏幕截图中的 Open 按钮后,这些文件将被添加到您的代码库,如下所示。
Step 9 − 单击 OK ,您将成功地将所需的 JAR 文件添加到当前项目中,并且可以通过展开引用的代码库来验证这些添加的代码库,如下所示。
Using pom.xml
将项目转换为 Maven 项目并添加以下内容到其 pom.xml.
<project xmlns="https://maven.apache.org/POM/4.0.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0
https://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 - Creating a PDF Document
现在,我们来了解如何使用 PDFBox 库创建 PDF 文档。
Creating an Empty PDF Document
您可以通过实例化 PDDocument 类创建一个空的 PDF 文档。您可以使用 Save() 方法按所需位置保存文档。
以下是要创建空的 PDF 文档的步骤。
Step 1: Creating an Empty Document
属于 org.apache.pdfbox.pdmodel 包的 PDDocument 类是 PDFDocument 的内存表示。因此,通过实例化此类,您可以如以下代码块中所示创建一个空的 PDFDocument。
PDDocument document = new PDDocument();
Example
此示例演示了 PDF 文档的创建。在此,我们将创建一个名为 my_doc.pdf 的 Java 程序以生成 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 {
//Creating PDF document object
PDDocument document = new PDDocument();
//Saving the document
document.save("C:/PdfBox_Examples/my_doc.pdf");
System.out.println("PDF created");
//Closing the document
document.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac Document_Creation.java
java Document_Creation
在执行以上程序时,创建了一个 PDF 文档,显示了以下消息。
PDF created
如果验证指定路径,则可以找到创建的 PDF 文档,如下所示。
由于这是一个空文档,因此如果尝试打开此文档,将出现提示,显示错误消息,如下面的屏幕截图所示。
PDFBox - Adding Pages
在上一章中,我们已经了解了如何创建 PDF 文档。创建 PDF 文档后,您需要向其中添加页面。现在,我们来了解如何在 PDF 文档中添加页面。
Adding Pages to a PDF Document
您可以通过实例化 PDPage 类创建空页面,并使用 PDDocument 类的 addPage() 方法将其添加到 PDF 文档中。
以下是创建空文档并向其中添加页面的步骤。
Step 1: Creating an Empty Document
通过如下所示实例化 PDDocument 类来创建一个空 PDF 文档。
PDDocument document = new PDDocument();
Step 2: Creating a Blank Page
PDPage 类表示 PDF 文档中的页面,因此您可以通过实例化此类来创建一个空页面,如下面的代码块所示。
PDPage my_page = new PDPage();
Step 3: Adding Page to the Document
您可以使用 PDDocument 类的 addPage() 方法将页面添加到 PDF 文档中。您需要将 PDPage 对象作为参数传递给此方法。
因此,将上一步中创建的空白页面添加到 PDDocument 对象,如下面的代码块所示。
document.addPage(my_page);
通过这种方式,您可以向 PDF 文档中添加任意数量的页面。
Example
此示例演示了如何创建 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 {
//Creating PDF document object
PDDocument document = new PDDocument();
for (int i=0; i<10; i++) {
//Creating a blank page
PDPage blankPage = new PDPage();
//Adding the blank page to the document
document.addPage( blankPage );
}
//Saving the document
document.save("C:/PdfBox_Examples/my_doc.pdf");
System.out.println("PDF created");
//Closing the document
document.close();
}
}
使用以下命令从命令提示符编译并执行已保存的 Java 文件 −
javac Adding_pages.java
java Adding_pages
执行后,上述程序会创建一个空白页面的 PDF 文档,显示以下消息 −
PDF created
如果您验证指定的路径,则可以在下面的屏幕截图中找到创建的 PDF 文档。
PDFBox - Loading a Document
在前面的示例中,你已经看到了如何新建文档并向其中添加页。本节将教你如何加载系统中已存在的 PDF 文件,并对其执行一些操作。
Loading an Existing PDF Document
PDDocument 类的 load() 方法用于加载一个现有的 PDF 文件。遵循下面给出的步骤来加载一个现有的 PDF 文件。
Step 1: Loading an Existing PDF Document
使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:
File file = new File("path of the document")
PDDocument.load(file);
Example
假设我们有一个 PDF 文档,它包含一个页面,路径为 C:/PdfBox_Examples/ ,如下图所示。
此示例演示如何加载现有 PDF 文档。此处,我们将加载上述 sample.pdf PDF 文档,向其中添加一页,并以相同名称保存在同一路径中。
Step 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 {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/sample.pdf");
PDDocument document = PDDocument.load(file);
System.out.println("PDF loaded");
//Adding a blank page to the document
document.addPage(new PDPage());
//Saving the document
document.save("C:/PdfBox_Examples/sample.pdf");
//Closing the document
document.close();
}
}
使用以下命令,从命令提示符中编译并执行已保存的 Java 文件
javac LoadingExistingDocument.java
java LoadingExistingDocument
执行后,上述程序将加载指定的 PDF 文件,并向其中添加一个空白页,显示如下消息。
PDF loaded
如果验证指定的路径,您可以找到一个附加到指定的 PDF 文档中的其他页面,如下所示。
PDFBox - Removing Pages
现在我们来了解如何从 PDF 文档中删除页面。
Removing Pages from an Existing Document
您可以使用 PDDocument 类中的 removePage() 方法从现有 PDF 文档中删除一个页面。
Step 1: Loading an Existing PDF Document
使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:
File file = new File("path of the document")
PDDocument.load(file);
Step 2: Listing the Number of Pages
您可以使用 getNumberOfPages() 方法列出 PDF 文档中存在的页数,如下所示。
int noOfPages= document.getNumberOfPages();
System.out.print(noOfPages);
Step 3: Removing the Page
您可以使用 PDDocument 类中的 removePage() 方法从 PDF 文档中删除一个页面。对于此方法,您需要传递要删除的页面的索引。
在为 PDF 文档中的页面指定索引时,请记住这些页面的索引从零开始,即,如果您要删除第 1 页,则索引值必须为 0。
document.removePage(2);
Example
假设我们有一个名为 sample.pdf 的 PDF 文档,它包含三个空页面,如下所示。
此示例演示如何从现有 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 {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/sample.pdf");
PDDocument document = PDDocument.load(file);
//Listing the number of existing pages
int noOfPages= document.getNumberOfPages();
System.out.print(noOfPages);
//Removing the pages
document.removePage(2);
System.out.println("page removed");
//Saving the document
document.save("C:/PdfBox_Examples/sample.pdf");
//Closing the document
document.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac RemovingPages.java
java RemovingPages
在执行时,上述程序创建了一个 PDF 文档,其中包含空白页面,显示以下消息。
3
page removed
如果您验证指定的路径,您会发现所需的页面已被删除,并且文档中仅剩两页,如下所示。
PDFBox - Document Properties
像其他文件一样,PDF 文档也具有文档属性。这些属性是键值对。每个属性都提供有关文档的特定信息。
以下是 PDF 文档的属性 −
S.No. |
Property & Description |
1 |
File 此属性保存文件名。 |
2 |
Title 使用此属性,可以给文档设置标题。 |
3 |
Author 使用此属性,可以给文档设置作者的姓名。 |
4 |
Subject 使用此属性,可以指定 PDF 文档的主题。 |
5 |
Keywords 利用此属性,可以列出用来搜索文档的关键字。 |
6 |
Created 利用此属性,可以设置文件的创建时间。 |
7 |
Modified 利用此属性,可以设置文件的修改时间。 |
8 |
Application 利用此属性,可以设置文档的应用程序。 |
以下是 PDF 文档的文档属性表截图。
Setting the Document Properties
PDFBox 为您提供了名为 PDDocumentInformation 的类。此类包含一组 setter 和 getter 方法。
此类的 setter 方法用于将值设置给文档的各种属性,而 getter 方法用于检索这些值。
以下是 PDDocumentInformation 类的 setter 方法。
S.No. |
Method & Description |
1 |
setAuthor(String author) 此方法用于设置名为 Author 的 PDF 文档属性的值。 |
2 |
setTitle(String title) 此方法用于设置名为 Title 的 PDF 文档属性的值。 |
3 |
setCreator(String creator) 此方法用于设置名为 Creator 的 PDF 文档属性的值。 |
4 |
setSubject(String subject) 此方法用于设置名为 Subject 的 PDF 文档属性的值。 |
5 |
setCreationDate(Calendar date) 此方法用于设置名为 CreationDate 的 PDF 文档属性的值。 |
6 |
setModificationDate(Calendar date) 此方法用于设置名为 ModificationDate 的 PDF 文档属性的值。 |
7 |
setKeywords(String keywords list) 此方法用于设置名为 Keywords 的 PDF 文档属性的值。 |
Example
PDFBox 提供了一个名为 PDDocumentInformation 的类,此类提供了各种方法。这些方法可以将各种属性设置给文档并检索这些属性。
此示例演示了如何将属性(如 Author, Title, Date, and Subject )添加到 PDF 文档。此处,我们将创建名为 doc_attributes.pdf 的 PDF 文档,向其中添加各种属性,并将其保存在路径 C:/PdfBox_Examples/ 中。在名为 AddingAttributes.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 {
//Creating PDF document object
PDDocument document = new PDDocument();
//Creating a blank page
PDPage blankPage = new PDPage();
//Adding the blank page to the document
document.addPage( blankPage );
//Creating the PDDocumentInformation object
PDDocumentInformation pdd = document.getDocumentInformation();
//Setting the author of the document
pdd.setAuthor("Tutorialspoint");
// Setting the title of the document
pdd.setTitle("Sample document");
//Setting the creator of the document
pdd.setCreator("PDF Examples");
//Setting the subject of the document
pdd.setSubject("Example document");
//Setting the created date of the document
Calendar date = new GregorianCalendar();
date.set(2015, 11, 5);
pdd.setCreationDate(date);
//Setting the modified date of the document
date.set(2016, 6, 5);
pdd.setModificationDate(date);
//Setting keywords for the document
pdd.setKeywords("sample, first example, my pdf");
//Saving the document
document.save("C:/PdfBox_Examples/doc_attributes.pdf");
System.out.println("Properties added successfully ");
//Closing the document
document.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac AddingAttributes.java
java AddingAttributes
执行时,上述程序将所有指定属性添加到文档中,并显示以下消息。
Properties added successfully
现在,如果您访问给定路径,您可以在其中找到创建的 PDF。右击文档并选择文档属性选项,如下所示。
以下方法为文档属性窗口,你可以观察到文档的所有属性均设置为指定的值。
Retrieving the Document Properties
你可以使用 PDDocumentInformation 类提供的 getter 方法来检索文档属性。
下面是 PDDocumentInformation 类的 getter 方法。
S.No. |
Method & Description |
1 |
getAuthor() 此方法用于检索名为 Author 的 PDF 文件的属性的值。 |
2 |
getTitle() 此方法用于检索名为 Title 的 PDF 文件的属性的值。 |
3 |
getCreator() 此方法用于检索名为 Creator 的 PDF 文件的属性的值。 |
4 |
getSubject() 此方法用于检索名为 Subject 的 PDF 文件的属性的值。 |
5 |
getCreationDate() 此方法用于检索名为 CreationDate 的 PDF 文件的属性的值。 |
6 |
getModificationDate() 此方法用于检索名为 ModificationDate 的 PDF 文件的属性的值。 |
7 |
getKeywords() 此方法用于检索名为 Keywords 的 PDF 文件的属性的值。 |
Example
此示例演示如何检索现有 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 {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/doc_attributes.pdf")
PDDocument document = PDDocument.load(file);
//Getting the PDDocumentInformation object
PDDocumentInformation pdd = document.getDocumentInformation();
//Retrieving the info of a PDF document
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());
//Closing the document
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 - Adding Text
在上一个章节中,我们讨论了如何向 PDF 文档添加页面。在本章节中,我们将讨论如何向现有 PDF 文档添加文本。
Adding Text to an Existing PDF Document
您可以使用 PDFBox 库向文档添加内容,这为您提供了名为 PDPageContentStream 的类,其中包含在 PDF 文档页面中插入文本、图片和其他类型内容的必要方法。
以下是创建空白文档并在其中向页面添加内容的步骤。
Step 1: Loading an Existing Document
您可以使用 PDDocument 类的 load() 方法加载现有文档。因此,实例化此类并按如下所示加载所需文档。
File file = new File("Path of the document");
PDDocument doc = document.load(file);
Step 2: Getting the Required Page
您可以使用 getPage() 方法获取文档中所需的页面。按如下所示将索引传递给此方法来检索所需页面的对象。
PDPage page = doc.getPage(1);
Step 3: Preparing the Content Stream
您可以使用类 PDPageContentStream 的对象插入多种数据元素。您需要将文档对象和页面对象传递给这个类的构造函数,因此,实例化这个类需要传递前面步骤创建的这两个对象,如下所示。
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
Step 4: Beginning the Text
在向 PDF 文档插入文本时,您可以使用 PDPageContentStream 类中的 beginText() 和 endText() 方法指定文本的起始点和结束点,如下所示。
contentStream.beginText();
………………………..
code to add text content
………………………..
contentStream.endText();
因此,按如下所示使用 beginText() 方法开始文本。
contentStream.beginText();
Step 5: Setting the Position of the Text
通过使用 newLineAtOffset() 方法,您可以在页面中的内容流上设置位置。
//Setting the position for the line
contentStream.newLineAtOffset(25, 700);
Step 6: Setting the Font
您可以使用 PDPageContentStream 类的 setFont() 方法将文本字体设置为所需的样式,如下所示。您需要向此方法传递字体类型和大小。
contentStream.setFont( font_type, font_size );
Step 7: Inserting the Text
您可以使用 PDPageContentStream 类的 ShowText() 方法将文本插入到页面中,如下所示。该方法以字符串的形式接受所需的文本。
contentStream.showText(text);
Step 8: Ending the Text
插入文本后,您需要使用 PDPageContentStream 类的 endText() 方法结束文本,如下所示。
contentStream.endText();
Example
本例演示如何向文档中的页面添加内容。在这里,我们将创建一个 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 {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/my_doc.pdf");
PDDocument document = PDDocument.load(file);
//Retrieving the pages of the document
PDPage page = document.getPage(1);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
//Begin the Content stream
contentStream.beginText();
//Setting the font to the Content stream
contentStream.setFont(PDType1Font.TIMES_ROMAN, 12);
//Setting the position for the line
contentStream.newLineAtOffset(25, 500);
String text = "This is the sample document and we are adding content to it.";
//Adding text in the form of string
contentStream.showText(text);
//Ending the content stream
contentStream.endText();
System.out.println("Content added");
//Closing the content stream
contentStream.close();
//Saving the document
document.save(new File("C:/PdfBox_Examples/new.pdf"));
//Closing the document
document.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac AddingContent.java
java AddingContent
在执行时,上述程序会将给定的文本添加到文档并显示以下消息。
Content added
如果您在指定路径中验证 PDF 文档 new.pdf ,您可以观察到给定的内容已添加到文档中,如下所示。
PDFBox - Adding Multiple Lines
在上一章提供的示例中,我们讨论了如何向 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";
用上述字符串替换上一章示例中的 string text 并执行它。执行后,您将收到以下输出。
如果您仔细观察输出,则会注意到仅显示字符串的一部分。
要向 PDF 添加多行,您需要使用 setLeading() 方法设置前导,并在完成每行后使用 newline() 方法移至新行。
Steps
以下是创建空白文档并在其中向页面添加内容的步骤。
Step 1: Loading an Existing Document
您可以使用 PDDocument 类的 load() 方法加载现有文档。因此,实例化此类并按如下所示加载所需文档。
File file = new File("Path of the document");
PDDocument doc = PDDocument.load(file);
Step 2: Getting the Required Page
您可以使用 getPage() 方法获取文档中所需的页面。按如下所示将索引传递给此方法来检索所需页面的对象。
PDPage page = doc.getPage(1);
Step 3: Preparing the Content stream
您可以使用名为 PDPageContentStream 的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,按如下所示传递在先前步骤中创建的这两个对象来实例化此类。
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
Step 4: Beginning the Text
在 PDF 文档中插入文本时,您可以使用 PDPageContentStream 类的 beginText() 和 endText() 方法指定文本的开始和结束点,如下所示。
contentStream.beginText();
………………………..
code to add text content
………………………..
contentStream.endText();
因此,按如下所示使用 beginText() 方法开始文本。
contentStream.beginText();
Step 5: Setting the Position of the Text
通过使用 newLineAtOffset() 方法,您可以在页面中的内容流上设置位置。
//Setting the position for the line
contentStream.newLineAtOffset(25, 700);
Step 6: Setting the Font
您可以按如下所示使用 PDPageContentStream 类的 setFont() 方法将文本的字体设置所需样式,对于此方法,您需要传递字体的类型和大小。
contentStream.setFont( font_type, font_size );
Step 8: Inserting Multiple Strings Using newline()
您可以按如下所示使用 PDPageContentStream 类的 ShowText() 方法插入多个字符串,方法是使用 newline() 方法将它们逐个分割。
contentStream. ShowText(text1);
contentStream.newLine();
contentStream. ShowText(text2);
Step 9: Ending the Text
插入文本后,您需要使用 PDPageContentStream 类的 endText() 方法结束文本,如下所示。
contentStream.endText();
Example
本例演示如何使用 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 {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/my_pdf.pdf");
PDDocument doc = document.load(file);
//Creating a PDF Document
PDPage page = doc.getPage(1);
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
//Begin the Content stream
contentStream.beginText();
//Setting the font to the Content stream
contentStream.setFont( PDType1Font.TIMES_ROMAN, 16 );
//Setting the leading
contentStream.setLeading(14.5f);
//Setting the position for the line
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";
//Adding text in the form of string
contentStream. ShowText(text1);
contentStream.newLine();
contentStream. ShowText(text2);
//Ending the content stream
contentStream.endText();
System.out.println("Content added");
//Closing the content stream
contentStream.close();
//Saving the document
doc.save(new File("C:/PdfBox_Examples/new.pdf"));
//Closing the document
doc.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac AddMultipleLines.java
java AddMultipleLines
在执行时,上述程序会将给定的文本添加到文档并显示以下消息。
Content added
如果您在指定路径中验证 PDF 文档 new.pdf ,您可以看到给定的内容已以多行的形式添加到文档中,如下所示。
PDFBox - Reading Text
在前一章中,我们已经了解如何向现有 PDF 文档中添加文本。在本章中,我们将讨论如何从现有 PDF 文档中读取文本。
Extracting Text from an Existing PDF Document
提取文本是 PDF 框库的主要功能。您可以使用 PDFTextStripper 类中的 getText() 方法提取文本。此类从给定的 PDF 文档中提取所有文本。
以下是从现有 PDF 文档中提取文本的步骤。
Step 1: Loading an Existing PDF Document
使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:
File file = new File("path of the document")
PDDocument document = PDDocument.load(file);
Step 2: Instantiate the PDFTextStripper Class
PDFTextStripper 类提供了从 PDF 文档中检索文本的方法,因此,如下所示实例化此类。
PDFTextStripper pdfStripper = new PDFTextStripper();
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 {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/new.pdf");
PDDocument document = PDDocument.load(file);
//Instantiate PDFTextStripper class
PDFTextStripper pdfStripper = new PDFTextStripper();
//Retrieving text from PDF document
String text = pdfStripper.getText(document);
System.out.println(text);
//Closing the document
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 - Inserting Image
在上一章中,我们已经了解如何从现有 PDF 文档中提取文本。在本章中,我们将讨论如何将图像插入 PDF 文档。
Inserting Image to a PDF Document
使用 PDImageXObject 类和 PDPageContentStream 类中的 createFromFile() 和 drawImage() 方法,可以将图像插入 PDF 文档。
以下是从现有 PDF 文档中提取文本的步骤。
Step 1: Loading an Existing PDF Document
使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:
File file = new File("path of the document")
PDDocument doc = PDDocument.load(file);
Step 3: Creating PDImageXObject object
PDFBox 库中的 PDImageXObject 类表示一张图片。它提供了执行图片相关操作所需的所有方法,例如插入图片、设置其高度、设置其宽度等。
我们可以使用 createFromFile() 方法创建此类的对象。我们需要向此方法传递作为字符串的要添加图片的路径和要向其中添加图片的文档对象。
PDImageXObject pdImage = PDImageXObject.createFromFile("C:/logo.png", doc);
Step 4: Preparing the Content Stream
您可以使用名为 PDPageContentStream 的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,按如下所示传递在先前步骤中创建的这两个对象来实例化此类。
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
Step 5: Drawing the Image in the PDF Document
可以使用 drawImage() 方法在 PDF 文档中插入图片。需要向此方法添加在上一步创建的图片对象和图片所需尺寸(宽度和高度),如下所示。
contentstream.drawImage(pdImage, 70, 250);
Example
假设我们有一个名为 sample.pdf 的 PDF 文档,路径为 C:/PdfBox_Examples/ ,空白页如下所示。
此示例演示如何将图片添加到上述 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 {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/sample.pdf");
PDDocument doc = PDDocument.load(file);
//Retrieving the page
PDPage page = doc.getPage(0);
//Creating PDImageXObject object
PDImageXObject pdImage = PDImageXObject.createFromFile("C:/PdfBox_Examples/logo.png",doc);
//creating the PDPageContentStream object
PDPageContentStream contents = new PDPageContentStream(doc, page);
//Drawing the image in the PDF document
contents.drawImage(pdImage, 70, 250);
System.out.println("Image inserted");
//Closing the PDPageContentStream object
contents.close();
//Saving the document
doc.save("C:/PdfBox_Examples/sample.pdf");
//Closing the document
doc.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac InsertingImage.java
java InsertingImage
执行后,以上程序将图片插入到指定页的给定 PDF 文档,并显示以下消息。
Image inserted
验证文档 sample.pdf ,您可以看到其中插入的图片如下所示。
PDFBox - Encrypting a PDF Document
在上一章中,我们已经了解如何向 PDF 文档中插入图片。在本章中,我们讨论如何加密 PDF 文档。
Encrypting a PDF Document
可以使用 StandardProtectionPolicy 和 AccessPermission classes 提供的方法加密 PDF 文档。
AccessPermission 类用于通过向 PDF 文档分配访问权限来保护它。使用此类,可以限制用户执行以下操作。
-
Print the document
-
修改文档的内容
-
复制或提取文档内容
-
Add or modify annotations
-
填写交互式表单字段
-
提取文本和图形以供视力障碍人士使用
-
Assemble the document
-
Print in degraded quality
StandardProtectionPolicy 类用于为文档添加基于密码的保护。
以下是加密现有 PDF 文档的步骤。
Step 1: Loading an Existing PDF Document
使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:
File file = new File("path of the document")
PDDocument document = PDDocument.load(file);
Step 2: Creating Access Permission Object
实例化 AccessPermission 类,如下所示。
AccessPermission accessPermission = new AccessPermission();
Step 3: Creating StandardProtectionPolicy Object
使用 StandardProtectionPolicy 类,通过传递所有者密码、用户密码和 AccessPermission 对象,按照如下所示进行实例化。
StandardProtectionPolicy spp = new StandardProtectionPolicy("1234","1234",accessPermission);
Step 4: Setting the Length of the Encryption Key
使用 setEncryptionKeyLength() 方法设置加密密钥长度,按照如下所示进行。
spp.setEncryptionKeyLength(128);
Step 5: Setting the Permissions
使用 StandardProtectionPolicy 类的 setPermissions() 方法设置权限。此方法接受 AccessPermission 对象作为参数。
spp.setPermissions(accessPermission);
Step 6: Protecting the Document
您可以使用 PDDocument 类的 protect() 方法来保护您的文档,按照如下所示进行。将 StandardProtectionPolicy 对象作为参数传递给此方法。
document.protect(spp);
Example
假设我们有一个名为 sample.pdf 的 PDF 文档,路径为 C:/PdfBox_Examples/ ,并且页面为空,如下所示。
此示例演示如何加密上述的 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 {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/sample.pdf");
PDDocument document = PDDocument.load(file);
//Creating access permission object
AccessPermission ap = new AccessPermission();
//Creating StandardProtectionPolicy object
StandardProtectionPolicy spp = new StandardProtectionPolicy("1234", "1234", ap);
//Setting the length of the encryption key
spp.setEncryptionKeyLength(128);
//Setting the access permissions
spp.setPermissions(ap);
//Protecting the document
document.protect(spp);
System.out.println("Document encrypted");
//Saving the document
document.save("C:/PdfBox_Examples/sample.pdf");
//Closing the document
document.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac EncriptingPDF.java
java EncriptingPDF
执行完上述程序之后,会对给定的 PDF 文档加密并显示以下信息。
Document encrypted
如果您尝试打开文档 sample.pdf ,则您无法打开它,因为它已被加密。于是,它会提示您输入密码以打开文档,按照如下所示进行。
PDFBox - JavaScript in PDF Document
在上一章中,我们学习了如何将图像插入 PDF 文档。在本章中,我们将讨论如何将 JavaScript 添加到 PDF 文档中。
Adding JavaScript to a PDF Document
可以使用 PDActionJavaScript 类将 JavaScript 操作添加到 PDF 文档。这表示一个 JavaScript 操作。
以下是向现有 PDF 文档添加 JavaScript 操作的步骤。
Step 1: Loading an Existing PDF Document
使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:
File file = new File("path of the document")
PDDocument document = PDDocument.load(file);
Step 2: Creating the PDActionJavaScript Object
如下所示,实例化 PDActionJavaScript 对象。为此类的构造函数传递所需的 JavaScript,形式为 String,如下所示。
String javaScript = "app.alert( {cMsg: 'this is an example', nIcon: 3,"
+ " nType: 0,cTitle: 'PDFBox Javascript example' } );";
PDActionJavaScript PDAjavascript = new PDActionJavaScript(javaScript);
Step 3: Embedding Java script in the Document
将所需字符串嵌入 PDF 文档,如下所示。
document.getDocumentCatalog().setOpenAction(PDAjavascript);
Example
假设我们有一个名为 sample.pdf 的 PDF 文档,路径为 C:/PdfBox_Examples/ ,并且页面为空,如下所示。
此示例演示如何将 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 {
//Loading an existing file
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’} );";
//Creating PDActionJavaScript object
PDActionJavaScript PDAjavascript = new PDActionJavaScript(javaScript);
//Embedding java script
document.getDocumentCatalog().setOpenAction(PDAjavascript);
//Saving the document
document.save( new File("C:/PdfBox_Examples/new.pdf") );
System.out.println("Data added to the given PDF");
//Closing the document
document.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac AddJavaScript.java
java AddJavaScript
执行后,上述程序将 JavaScript 嵌入给定 PDF 文档,显示以下消息。
Data added to the given PDF
如果您尝试打开文档 new.pdf ,它会显示如下所示的警报消息。
PDFBox - Splitting a PDF Document
在上一个章节中,我们已经看到如何向 PDF 文档添加 JavaScript。现在,让我们学习如何将给定的 PDF 文档拆分为多个文档。
Splitting the Pages in a PDF Document
您可以使用名为 Splitter 的类将给定的 PDF 文档拆分为多个 PDF 文档。该类用于将给定 PDF 文档拆分为多个其他文档。
以下是拆分现有 PDF 文档的步骤:
Step 1: Loading an Existing PDF Document
使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:
File file = new File("path of the document")
PDDocument document = PDDocument.load(file);
Step 2: Instantiate the Splitter Class
名为 Splitter 的类包含拆分给定 PDF 文档的方法,因此,实例化这个类如下所示:
Splitter splitter = new Splitter();
Step 3: Splitting the PDF Document
您可以使用此类的 Split() 方法拆分给定的文档。此方法接受一个 Splitter 类的对象作为参数。
List<PDDocument> Pages = splitter.split(document);
split() 方法将给定文档的每页作为单独的文档进行拆分,并以列表的形式返回所有这些文档。
Example
比如说,有一个名称为 sample.pdf 的 PDF 文档,位于路径 C:\PdfBox_Examples\ 当中,此文档包含两页——一页包含图片,另一页包含文本,如下所示。
此示例演示如何分割上述 PDF 文档。这里,我们将名为 sample.pdf 的 PDF 文档分割为 sample1.pdf 和 sample2.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 {
//Loading an existing PDF document
File file = new File("C:/PdfBox_Examples/sample.pdf");
PDDocument document = PDDocument.load(file);
//Instantiating Splitter class
Splitter splitter = new Splitter();
//splitting the pages of a PDF document
List<PDDocument> Pages = splitter.split(document);
//Creating an iterator
Iterator<PDDocument> iterator = Pages.listIterator();
//Saving each page as an individual document
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 文件,名称为 sample1 和 sample2 ,如下所示。
PDFBox - Merging Multiple PDF Documents
在前一章中,我们已经了解如何将给定的 PDF 文档拆分为多个文档。现在我们来了解如何合并多个 PDF 文档为一个文档。
Merging Multiple PDF Documents
借助名为 PDFMergerUtility class 的类,可以将多个 PDF 文档合并到一个 PDF 文档中,此类提供将两个或更多 PDF 文档合并到一个 PDF 文档的方法。
以下是合并多个 PDF 文档的步骤。
Step 1: Instantiating the PDFMergerUtility class
按如下所示实例化合并实用程序类。
PDFMergerUtility PDFmerger = new PDFMergerUtility();
Step 2: Setting the destination file
按如下所示使用 setDestinationFileName() 方法设置目标文件。
PDFmerger.setDestinationFileName("C:/PdfBox_Examples/data1/merged.pdf");
Example
假设我们有两个 PDF 文档 sample1.pdf 和 sample2.pdf ,位于 C:\PdfBox_Examples\ 路径下,如下所示。
此示例演示如何合并上述 PDF 文档。在此我们将名为 sample1.pdf 和 sample2.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");
//Instantiating PDFMergerUtility class
PDFMergerUtility PDFmerger = new PDFMergerUtility();
//Setting the destination file
PDFmerger.setDestinationFileName("C:\\Examples\\merged.pdf");
//adding the source files
PDFmerger.addSource(file1);
PDFmerger.addSource(file2);
//Merging the two documents
PDFmerger.mergeDocuments();
System.out.println("Documents merged");
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac MergePDFs.java
java MergePDFs
执行完上述程序之后,会对给定的 PDF 文档加密并显示以下信息。
Documents merged
如果您验证给定的路径,您可以观察到创建了名为 merged.pdf 的 PDF 文档,其中包含源文档的所有页面,如下所示。
PDFBox - Converting PDF To Image
在之前的章节中,我们已经了解了如何合并多个 PDF 文档。在本节中,我们将了解如何从 PDF 文档的页面中提取图像。
Generating an Image from a PDF Document
PDFBox 库提供了一个名为 PDFRenderer 的类,该类将 PDF 文档呈现为 AWT BufferedImage。
以下是要从 PDF 文档中生成图像的步骤。
Step 1: Loading an Existing PDF Document
使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:
File file = new File("path of the document")
PDDocument document = PDDocument.load(file);
Step 2: Instantiating the PDFRenderer Class
名为 PDFRenderer 的类将 PDF 文档呈现为 AWT BufferedImage 。因此,您需要如下所示实例化此类。此类的构造函数接受一个文档对象;如以下所示传递先前步骤中创建的文档对象。
PDFRenderer renderer = new PDFRenderer(document);
Step 3: Rendering Image from the PDF Document
您可以使用 Renderer 类的 renderImage() 方法在特定页面中渲染图像,为此方法您需要传递要渲染的图像所在页面的索引。
BufferedImage image = renderer.renderImage(0);
Example
假设,我们在 C:\PdfBox_Examples\ 路径中有一个 PDF 文档 — sample.pdf ,其中在第一页中包含一个图像,如下所示。
此示例演示如何将上述 PDF 文档转换为图像文件。此处,我们将检索 PDF 文档第 1 页中的图像,并将其保存为 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 {
//Loading an existing PDF document
File file = new File("C:/PdfBox_Examples/sample.pdf");
PDDocument document = PDDocument.load(file);
//Instantiating the PDFRenderer class
PDFRenderer renderer = new PDFRenderer(document);
//Rendering an image from the PDF document
BufferedImage image = renderer.renderImage(0);
//Writing the image to a file
ImageIO.write(image, "JPEG", new File("C:/PdfBox_Examples/myimage.jpg"));
System.out.println("Image created");
//Closing the document
document.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac PdfToImage.java
java PdfToImage
执行后,上述程序检索给定 PDF 文档中的图像,显示以下消息。
Image created
如果验证给定路径,则可以观察到图像已生成并保存为 myimage.jpg ,如下所示。
PDFBox - Adding Rectangles
本章将教您如何在 PDF 文档页面中创建彩色方框。
Creating Boxes in a PDF Document
可以使用 PDPageContentStream 类的 addRect() 方法在 PDF 页面中添加矩形方框。
以下是如何在 PDF 文档页面中创建矩形形状的步骤。
Step 1: Loading an Existing PDF Document
使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:
File file = new File("path of the document")
PDDocument document = PDDocument.load(file);
Step 2: Getting the Page Object
您需要使用 PDDocument 类的 getPage() 方法检索您想在其中添加矩形的所需页面的 PDPage 对象。对该方法,您需要传递您想在其中添加矩形的页面的索引。
PDPage page = document.getPage(0);
Step 3: Preparing the Content Stream
您可以使用名为 PDPageContentStream 的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,按如下所示传递在先前步骤中创建的这两个对象来实例化此类。
PDPageContentStream contentStream = new PDPageContentStream(document, page);
Step 4: Setting the Non-stroking Color
可以使用 PDPageContentStream 类的 setNonStrokingColor() 方法向矩形设置非描边颜色。对该方法,您需要将所需的颜色作为参数传递,如下所示。
contentStream.setNonStrokingColor(Color.DARK_GRAY);
Step 5: Drawing the rectangle
使用 addRect() 方法绘制所需尺寸的矩形。对该方法,您需要传递待添加的矩形的尺寸,如下所示。
contentStream.addRect(200, 650, 100, 100);
Example
假设我们在路径 C:\PdfBox_Examples\ 中有一个名为 blankpage.pdf 的 PDF 文档,其中包含一个空白页,如下所示。
此示例演示如何在 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 {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/BlankPage.pdf");
PDDocument document = PDDocument.load(file);
//Retrieving a page of the PDF Document
PDPage page = document.getPage(0);
//Instantiating the PDPageContentStream class
PDPageContentStream contentStream = new PDPageContentStream(document, page);
//Setting the non stroking color
contentStream.setNonStrokingColor(Color.DARK_GRAY);
//Drawing a rectangle
contentStream.addRect(200, 650, 100, 100);
//Drawing a rectangle
contentStream.fill();
System.out.println("rectangle added");
//Closing the ContentStream object
contentStream.close();
//Saving the document
File file1 = new File("C:/PdfBox_Examples/colorbox.pdf");
document.save(file1);
//Closing the document
document.close();
}
}
使用以下命令从命令提示符处编译并执行已保存的 Java 文件。
javac AddRectangles.java
java AddRectangles
在执行以上程序时,会在 PDF 文档中创建一个显示以下图片的矩形框。
Rectangle created
如果您验证给定的路径并打开已保存的文档 — colorbox.pdf ,您可以观察到其中插入了一个框,如下所示。