PDFBox-概述
可移植文档格式(PDF)是一种文件格式,有助于以独立于应用程序软件、硬件和操作系统的方式呈现数据。
每个PDF文件都包含对固定布局平面文档的描述,包括文本、字体、图形和显示它所需的其他信息。
有几个库可用于通过程序创建和操作PDF文档,例如-
AdobePDFLibrary-该库以C、.NET和Java等语言提供API,使用它我们可以编辑、查看打印和从PDF文档中提取文本。
FormattingObjectsProcessor-由XSLFormattingObjects驱动的开源打印格式化程序和一个独立于输出的格式化程序。主要输出目标是PDF。
iText-该库以Java、C#和其他.NET语言等语言提供API,使用该库我们可以创建和操作PDF、RTF和HTML文档。
JasperReports-这是一个Java报告工具,可在PDF文档中生成报告,包括MicrosoftExcel、RTF、ODT、逗号分隔值和XML文件。
什么是PDFBox
ApachePDFBox是一个开源Java库,支持PDF文档的开发和转换。使用这个库,您可以开发创建、转换和操作PDF文档的Java程序。
除此之外,PDFBox还包括一个命令行实用程序,用于使用可用的Jar文件对PDF执行各种操作。
PDFBox的特点
以下是PDFBox的显着特点-
提取文本-使用PDFBox,您可以从PDF文件中提取Unicode文本。
Split&Merge-使用PDFBox,您可以将单个PDF文件分成多个文件,并将它们合并为单个文件。
FillForms-使用PDFBox,您可以在文档中填写表单数据。
Print-使用PDFBox,您可以使用标准Java打印API打印PDF文件。
SaveasImage-使用PDFBox,您可以将PDF保存为图像文件,例如PNG或JPEG。
创建PDF-使用PDFBox,您可以通过创建Java程序来创建新的PDF文件,还可以包含图像和字体。
签名-使用PDFBox,您可以向PDF文件添加数字签名。
PDFBox的应用
以下是PDFBox的应用-
ApacheNutch-ApacheNutch是一个开源网络搜索软件。它建立在ApacheLucene之上,添加了Web特性,例如爬虫、链接图数据库、HTML解析器和其他文档格式等。
ApacheTika-ApacheTika是一个工具包,用于使用现有的解析器库从各种文档中检测和提取元数据和结构化文本内容。
PDFBox组件
以下是PDFBox的四个主要组件-
PDFBox-这是PDFBox的主要部分。这包含与内容提取和操作相关的类和接口。
FontBox-这包含与字体相关的类和接口,使用这些类我们可以修改PDF文档文本的字体。
XmpBox-这包含处理XMP元数据的类和接口。
Preflight-此组件用于根据PDF/A-1b标准验证PDF文件。
PDFBox-环境
安装PDFBox
以下是下载ApachePDFBox的步骤-
第1步-通过单击以下链接打开ApachePDFBox的主页-ApachePDFBox|AJavaPDFLibrary
第2步-上面的链接将引导您到主页,如以下屏幕截图所示-
第3步-现在,单击上面屏幕截图中突出显示的下载链接。单击后,您将被定向到PDFBox的下载页面,如下图所示。
第4步-在“下载”页面中,您将获得PDFBox的链接。单击相应链接以获取最新版本。例如,我们选择PDFBox2.0.1,点击它,您将被定向到所需的jar文件,如以下屏幕截图所示。
第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,单击文件、新建,然后打开一个新项目,如以下屏幕截图所示。
第3步-选择项目后,您将获得新建项目向导。在此向导中,选择Java项目并单击Next按钮继续,如以下屏幕截图所示。
Step4-继续前进,您将被引导至NewJavaProject向导。创建一个新项目并单击下一步,如以下屏幕截图所示。
Step5-创建一个新项目后,右键单击它;选择BuildPath并单击ConfigureBuildPath...,如下面的屏幕截图所示。
Step6-单击BuildPath选项,您将被定向到JavaBuildPath向导。选择AddExternalJARs,如以下屏幕截图所示。
步骤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,如图所示在下面的屏幕截图中。
第8步-单击上面屏幕截图中的“打开”按钮,这些文件将被添加到您的库中,如以下屏幕截图所示。
Step9-单击OK,您将成功地将所需的JAR文件添加到当前项目中,您可以通过展开ReferencedLibraries来验证这些添加的库,如下面的屏幕截图所示。
使用pom.xml
将项目转换为maven项目,在其pom.xml中添加如下内容。
PDFBox-创建PDF文档
现在让我们了解如何使用PDFBox库创建PDF文档。
创建一个空的PDF文档
您可以通过实例化PDDocument类来创建一个空的PDF文档。您可以使用Save()方法将文档保存在所需的位置。
以下是创建空PDF文档的步骤。
第1步:创建一个空文档
属于包org.apache.pdfbox.pdmodel的PDDocument类是PDFDocument的内存表示。因此,通过实例化此类,您可以创建一个空的PDFDocument,如以下代码块所示。
PDDocumentdocument=newPDDocument();
第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的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序会创建一个显示以下消息的PDF文档。
PDFcreated
如果您验证指定的路径,您可以找到创建的PDF文档,如下所示。
由于这是一个空文档,如果您尝试打开此文档,则会提示您显示错误消息,如以下屏幕截图所示。
PDFBox-添加页面
在上一章中,我们已经了解了如何创建PDF文档。创建PDF文档后,您需要为其添加页面。现在让我们了解如何在PDF文档中添加页面。
将页面添加到PDF文档
您可以通过实例化PDPage类来创建一个空页面,并使用PDDocument类的addPage()方法将其添加到PDF文档中。
以下是创建空文档并向其添加页面的步骤。
第1步:创建一个空文档
通过实例化PDDocument类来创建一个空的PDF文档,如下所示。
PDDocumentdocument=newPDDocument();
第2步:创建空白页
PDPage类表示PDF文档中的一个页面,因此,您可以通过实例化该类来创建一个空页面,如以下代码块所示。
PDPagemy_page=newPDPage();
第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的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件-
执行后,上述程序会创建一个PDF文档,其中包含显示以下消息的空白页面-
PDFcreated
如果您验证指定的路径,您可以找到创建的PDF文档,如下图所示。
PDFBox-加载文档
在前面的示例中,您已经了解了如何创建新文档并向其添加页面。本章教您如何加载系统中已经存在的PDF文档,并对其进行一些操作。
加载现有的PDF文档
PDDocument类的load()方法用于加载现有的PDF文档。按照下面给出的步骤加载现有的PDF文档。
第1步:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有的PDF文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
步骤2:执行所需的操作
执行所需的操作,例如添加页面、添加文本、向加载的文档添加图像。
第3步:保存文档
添加所有页面后,使用PDDocument类的save()方法保存PDF文档,如以下代码块所示。
document.save("Path");
第4步:关闭文档
最后使用PDDocument类的close()方法关闭文档,如下所示。
document.close();
例子
假设我们有一个包含单个页面的PDF文档,路径为C:/PdfBox_Examples/,如下面的屏幕截图所示。
此示例演示如何加载现有PDF文档。在这里,我们将加载如上所示的PDF文档sample.pdf,为其添加一个页面,并以相同的名称保存在相同的路径中。
第1步-将此代码保存在名为LoadingExistingDocument.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件
执行后,上述程序加载指定的PDF文档并添加一个空白页,显示以下消息。
PDFloaded
如果您验证指定的路径,您可以找到添加到指定PDF文档的附加页面,如下所示。
PDFBox-删除页面
现在让我们学习如何从PDF文档中删除页面。
从现有文档中删除页面
您可以使用PDDocument类的removePage()方法从现有PDF文档中删除页面。
第1步:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有的PDF文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
第2步:列出页数
您可以使用getNumberOfPages()方法列出PDF文档中存在的页数,如下所示。
第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文档,它包含三个空白页面,如下所示。
此示例演示如何从现有PDF文档中删除页面。在这里,我们将加载上面指定的名为sample.pdf的PDF文档,从中删除一个页面,并将其保存在路径C:/PdfBox_Examples/中。将此代码保存在名为Removing_pages.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序会创建一个PDF文档,其中包含显示以下消息的空白页面。
如果你验证指定的路径,你可以发现需要的页面被删除了,文档中只剩下两页,如下图所示。
PDFBox-文档属性
与其他文件一样,PDF文档也具有文档属性。这些属性是键值对。每个属性都提供有关文档的特定信息。
以下是PDF文档的属性-
文件
此属性保存文件的名称。
标题
使用此属性,您可以设置文档的标题。
作者
使用此属性,您可以设置文档的作者姓名。
学科
使用此属性,您可以指定PDF文档的主题。
关键词
使用此属性,您可以列出我们可以用来搜索文档的关键字。
已创建
使用此属性,您可以设置为文档创建的日期。
修改的
使用此属性,您可以设置文档的修改日期。
应用
使用此属性,您可以设置文档的应用程序。
以下是PDF文档的文档属性表的屏幕截图。
设置文档属性
PDFBox为您提供了一个名为PDDocumentInformation的类。此类具有一组setter和getter方法。
此类的setter方法用于为文档的各种属性设置值,而getter方法用于检索这些值。
以下是PDDocumentInformation类的setter方法。
setAuthor(字符串作者)
此方法用于设置名为Author的PDF文档的属性值。
setTitle(字符串标题)
此方法用于设置名为Title的PDF文档的属性值。
setCreator(字符串创建者)
此方法用于设置名为Creator的PDF文档的属性值。
setSubject(字符串主题)
此方法用于设置名为Subject的PDF文档的属性值。
setCreationDate(日历日期)
此方法用于设置名为CreationDate的PDF文档的属性值。
setModificationDate(日历日期)
此方法用于设置名为ModificationDate的PDF文档的属性值。
setKeywords(字符串关键字列表)
此方法用于设置PDF文档名为Keywords的属性的值。
例子
PDFBox提供了一个名为PDDocumentInformation的类,该类提供了各种方法。这些方法可以为文档设置各种属性并检索它们。
此示例演示如何将作者、标题、日期和主题等属性添加到PDF文档。在这里,我们将创建一个名为doc_attributes.pdf的PDF文档,为其添加各种属性,并将其保存在路径C:/PdfBox_Examples/中。将此代码保存在名为AdditionalAttributes.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序将所有指定的属性添加到显示以下消息的文档中。
Propertiesaddedsuccessfully
现在,如果您访问给定的路径,您可以找到其中创建的PDF。右键单击文档并选择文档属性选项,如下所示。
这将为您提供文档属性窗口,您可以在此处观察文档的所有属性都设置为指定值。
检索文档属性
您可以使用PDDocumentInformation类提供的getter方法检索文档的属性。
以下是PDDocumentInformation类的getter方法。
获取作者()
此方法用于检索名为Author的PDF文档的属性值。
获取标题()
此方法用于检索名为Title的PDF文档的属性值。
获取创建者()
此方法用于检索名为Creator的PDF文档的属性值。
获取主题()
此方法用于检索名为Subject的PDF文档的属性值。
获取创建日期()
此方法用于检索名为CreationDate的PDF文档的属性值。
获取修改日期()
此方法用于检索名为ModificationDate的PDF文档的属性值。
获取关键字()
此方法用于检索名为“关键字”的PDF文档的属性值。
例子
此示例演示如何检索现有PDF文档的属性。在这里,我们将创建一个Java程序并加载名为doc_attributes.pdf的PDF文档,该文档保存在路径C:/PdfBox_Examples/中,并检索其属性。将此代码保存在名为RetrivingDocumentAttributes.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行时,上述程序检索文档的所有属性并显示它们,如下所示。
PDFBox-添加文本
在上一章中,我们讨论了如何向PDF文档添加页面。在本章中,我们将讨论如何向现有PDF文档添加文本。
向现有PDF文档添加文本
您可以使用PDFBox库将内容添加到文档中,它为您提供了一个名为PDPageContentStream的类,其中包含在PDFDocument的页面中插入文本、图像和其他类型的内容所需的方法。
以下是创建一个空文档并将内容添加到其中的页面的步骤。
第1步:加载现有文档
您可以使用PDDocument类的load()方法加载现有文档。因此,实例化该类并加载所需的文档,如下所示。
第2步:获取所需页面
您可以使用getPage()方法在文档中获取所需的页面。通过将其索引传递给此方法来检索所需页面的对象,如下所示。
PDPagepage=doc.getPage(1);
第3步:准备内容流
您可以使用PDPageContentStream类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递前面步骤中创建的这两个对象来实例化此类,如下所示。
PDPageContentStreamcontentStream=newPDPageContentStream(doc,page);
第4步:开始文本
在PDF文档中插入文本时,您可以使用PDPageContentStream类的beginText()和endText()方法指定文本的起点和终点,如下所示。
因此,使用beginText()方法开始文本,如下所示。
contentStream.beginText();
第5步:设置文本的位置
使用newLineAtOffset()方法,您可以在页面中的内容流上设置位置。
第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/中,并在其中添加一些文本。将此代码保存在名为AdditionalContent.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序将给定文本添加到文档并显示以下消息。
Contentadded
如果您验证指定路径中的PDF文档new.pdf,您可以观察到给定的内容已添加到文档中,如下所示。
PDFBox-添加多行
在上一章提供的示例中,我们讨论了如何在PDF的页面中添加文本,但通过该程序,您只能添加适合单行的文本。如果您尝试添加更多内容,则不会显示所有超出行距的文本。
例如,如果您通过传递以下字符串来执行上一章中的上述程序,则只会显示其中的一部分。
将上一章示例的字符串文本替换为上述字符串并执行。执行后,您将收到以下输出。
如果你仔细观察输出,你会注意到只显示了字符串的一部分。
为了向PDF添加多行,您需要使用setLeading()方法设置前导,并在完成每一行后使用newline()方法切换到新行。
脚步
以下是创建一个空文档并将内容添加到其中的页面的步骤。
第1步:加载现有文档
您可以使用PDDocument类的load()方法加载现有文档。因此,实例化该类并加载所需的文档,如下所示。
第2步:获取所需页面
您可以使用getPage()方法在文档中获取所需的页面。通过将其索引传递给此方法来检索所需页面的对象,如下所示。
PDPagepage=doc.getPage(1);
第3步:准备内容流
您可以使用名为PDPageContentStream的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递前面步骤中创建的这两个对象来实例化此类,如下所示。
PDPageContentStreamcontentStream=newPDPageContentStream(doc,page);
第4步:开始文本
在PDF文档中插入文本时,您可以使用PDPageContentStream类的beginText()和endText()方法指定文本的起点和终点,如下所示。
因此,使用beginText()方法开始文本,如下所示。
contentStream.beginText();
第5步:设置文本的位置
使用newLineAtOffset()方法,您可以在页面中的内容流上设置位置。
第6步:设置字体
您可以使用PDPageContentStream类的setFont()方法将文本的字体设置为所需的样式,如下所示,该方法需要传递字体的类型和大小。
contentStream.setFont(font_type,font_size);
第7步:设置文本前导
您可以使用setLeading()方法设置文本前导,如下所示。
contentStream.setLeading(14.5f);
第8步:使用newline()插入多个字符串
您可以使用PDPageContentStream类的ShowText()方法插入多个字符串,方法是使用newline()方法将每个字符串分开,如下所示。
第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的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序将给定文本添加到文档并显示以下消息。
Contentadded
如果您验证指定路径中的PDF文档new.pdf,您可以观察到给定的内容以多行添加到文档中,如下所示。
PDFBox-阅读文本
在上一章中,我们已经了解了如何将文本添加到现有的PDF文档中。在本章中,我们将讨论如何从现有的PDF文档中读取文本。
从现有PDF文档中提取文本
提取文本是PDF框库的主要功能之一。您可以使用PDFTextStripper类的getText()方法提取文本。此类从给定的PDF文档中提取所有文本。
以下是从现有PDF文档中提取文本的步骤。
第1步:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有的PDF文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
第2步:实例化PDFTextStripper类
PDFTextStripper类提供了从PDF文档中检索文本的方法,因此,如下所示实例化此类。
PDFTextStripperpdfStripper=newPDFTextStripper();
第3步:检索文本
您可以使用PDFTextStripper类的getText()方法从PDF文档中读取/检索页面的内容。对于此方法,您需要将文档对象作为参数传递。此方法检索给定文档中的文本并以String对象的形式返回。
Stringtext=pdfStripper.getText(document);
第4步:关闭文档
最后,使用PDDocument类的close()方法关闭文档,如下所示。
document.close();
例子
假设我们有一个PDF文档,其中包含一些文本,如下所示。
此示例演示如何从上述PDF文档中读取文本。在这里,我们将创建一个Java程序并加载一个名为new.pdf的PDF文档,该文档保存在路径C:/PdfBox_Examples/中。将此代码保存在名为ReadingText.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序从给定的PDF文档中检索文本并将其显示如下所示。
PDFBox-插入图片
在上一章中,我们已经了解了如何从现有PDF文档中提取文本。在本章中,我们将讨论如何将图像插入PDF文档。
将图像插入PDF文档
您可以分别使用PDImageXObject和PDPageContentStream类的createFromFile()和drawImage()方法将图像插入PDF文档。
以下是从现有PDF文档中提取文本的步骤。
第1步:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有的PDF文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
第2步:检索页面
在PDF文档中选择一个页面并使用getPage()方法检索其页面对象,如下所示。
PDPagepage=doc.getPage(0);
第3步:创建PDImageXObject对象
PDFBox库中的PDImageXObject类代表一个图像。它提供了执行与图像相关的操作所需的所有方法,例如插入图像、设置其高度、设置其宽度等。
我们可以使用createFromFile()方法创建此类的对象。对于此方法,我们需要以字符串的形式传递要添加的图像的路径以及需要添加图像的文档对象。
PDImageXObjectpdImage=PDImageXObject.createFromFile("C:/logo.png",doc);
第4步:准备内容流
您可以使用名为PDPageContentStream的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递前面步骤中创建的这两个对象来实例化此类,如下所示。
PDPageContentStreamcontentStream=newPDPageContentStream(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/中,其中包含如下所示的空白页面。
此示例演示如何将图像添加到上述PDF文档的空白页。在这里,我们将加载名为sample.pdf的PDF文档并为其添加图像。将此代码保存在名为InsertingImage.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序将图像插入给定PDF文档的指定页面,显示以下消息。
Imageinserted
如果您验证文档sample.pdf,您可以观察到其中插入了一张图像,如下所示。
PDFBox-加密PDF文档
在上一章中,我们已经了解了如何在PDF文档中插入图像。在本章中,我们将讨论如何加密PDF文档。
加密PDF文档
您可以使用StandardProtectionPolicy和AccessPermission类提供的方法加密PDF文档。
AccessPermission类用于通过为其分配访问权限来保护PDF文档。使用此类,您可以限制用户执行以下操作。
- 打印文档
- 修改文档内容
- 复制或提取文档内容
- 添加或修改注释
- 填写交互式表单域
- 提取文本和图形以供视障人士使用
- 组装文件
- 打印质量下降
StandardProtectionPolicy类用于向文档添加基于密码的保护。
以下是加密现有PDF文档的步骤。
第1步:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有的PDF文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
步骤2:创建访问权限对象
实例化AccessPermission类,如下所示。
AccessPermissionaccessPermission=newAccessPermission();
第3步:创建StandardProtectionPolicy对象
通过传递所有者密码、用户密码和AccessPermission对象来实例化StandardProtectionPolicy类,如下所示。
StandardProtectionPolicyspp=newStandardProtectionPolicy("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/中,页面为空,如下所示。
此示例演示如何加密上述PDF文档。在这里,我们将加载名为sample.pdf的PDF文档并对其进行加密。将此代码保存在名为EncriptingPDF.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序会加密显示以下消息的给定PDF文档。
Documentencrypted
如果您尝试打开文档sample.pdf,则无法打开,因为它已加密。相反,它会提示输入密码以打开文档,如下所示。
PDFBox-PDF文档中的JavaScript
在上一章中,我们学习了如何将图像插入PDF文档。在本章中,我们将讨论如何将JavaScript添加到PDF文档中。
将JavaScript添加到PDF文档
您可以使用PDActionJavaScript类将JavaScript操作添加到PDF文档。这代表一个JavaScript动作。
以下是将JavaScript操作添加到现有PDF文档的步骤。
第1步:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有的PDF文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
第2步:创建PDActionJavaScript对象
实例化PDActionJavaScript对象,如下所示。将所需的JavaScript以String的形式传递给该类的构造函数,如下所示。
第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/中,页面为空,如下所示。
此示例演示如何在上述PDF文档中嵌入JavaScript。在这里,我们将加载名为sample.pdf的PDF文档并在其中嵌入JavaScript。将此代码保存在名为AddJavaScript.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序将JavaScript嵌入给定的PDF文档中,显示以下消息。
DataaddedtothegivenPDF
如果您尝试打开文档new.pdf,它将显示如下所示的警告消息。
PDFBox-拆分PDF文档
在上一章中,我们已经了解了如何将JavaScript添加到PDF文档中。现在让我们学习如何将给定的PDF文档拆分为多个文档。
拆分PDF文档中的页面
您可以使用名为Splitter的类将给定的PDF文档拆分为多个PDF文档。此类用于将给定的PDF文档拆分为其他几个文档。
以下是拆分现有PDF文档的步骤
第1步:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有的PDF文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
第2步:实例化拆分器类
名为Splitter的类包含拆分给定PDF文档的方法,因此,实例化该类,如下所示。
Splittersplitter=newSplitter();
第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.pdf和sample2.pdf。将此代码保存在名为SplitPages.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件
执行后,上述程序会加密显示以下消息的给定PDF文档。
MultiplePDF’screated
如果您验证给定的路径,您可以观察到创建了多个名为sample1和sample2的PDF,如下所示。
PDFBox-合并多个PDF文档
在上一章中,我们已经了解了如何将给定的PDF文档拆分为多个文档。现在让我们学习如何将多个PDF文档合并为一个文档。
合并多个PDF文档
您可以使用名为PDFMergerUtility的类将多个PDF文档合并为单个PDF文档,该类提供将两个或多个PDF文档合并为单个PDF文档的方法。
以下是合并多个PDF文档的步骤。
步骤1:实例化PDFMergerUtility类
实例化合并实用程序类,如下所示。
PDFMergerUtilityPDFmerger=newPDFMergerUtility();
第二步:设置目标文件
使用setDestinationFileName()方法设置目标文件,如下所示。
PDFmerger.setDestinationFileName("C:/PdfBox_Examples/data1/merged.pdf");
第三步:设置源文件
使用addSource()方法设置源文件,如下所示。
第4步:合并文档
使用PDFmerger类的mergeDocuments()方法合并文档,如下所示。
PDFmerger.mergeDocuments();
例子
假设我们有两个PDF文档—sample1.pdf和sample2.pdf,位于路径C:\PdfBox_Examples\中,如下所示。
本示例演示如何合并上述PDF文档。在这里,我们将名为sample1.pdf和sample2.pdf的PDF文档合并到一个PDF文档merge.pdf中。将此代码保存在名为MergePDFs.java的文件中。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序会加密显示以下消息的给定PDF文档。
Documentsmerged
如果您验证给定的路径,您可以观察到创建了一个名为merge.pdf的PDF文档,其中包含两个源文档的页面,如下所示。
PDFBox-将PDF转换为图像
在上一章中,我们已经了解了如何合并多个PDF文档。在本章中,我们将了解如何从PDF文档的页面中提取图像。
从PDF文档生成图像
PDFBox库为您提供了一个名为PDFRenderer的类,它将PDF文档呈现为AWTBufferedImage。
以下是从PDF文档生成图像的步骤。
第1步:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有的PDF文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
第2步:实例化PDFRenderer类
名为PDFRenderer的类将PDF文档呈现为AWTBufferedImage。因此,您需要实例化此类,如下所示。此类的构造函数接受一个文档对象;传递上一步中创建的文档对象,如下所示。
PDFRendererrenderer=newPDFRenderer(document);
第3步:从PDF文档渲染图像
您可以使用Renderer类的方法renderImage()在特定页面中渲染图像,您需要将要渲染图像的页面的索引传递给此方法。
BufferedImageimage=renderer.renderImage(0);
第4步:将图像写入文件
您可以使用write()方法将上一步中渲染的图像写入文件。对于此方法,您需要传递三个参数-
- 渲染的图像对象。
- 表示图像类型(jpg或png)的字符串。
- 您需要将提取的图像保存到的文件对象。
ImageIO.write(image,"JPEG",newFile("C:/PdfBox_Examples/myimage.jpg"));
第5步:关闭文档
最后,使用PDDocument类的close()方法关闭文档,如下所示。
document.close();
例子
假设我们有一个PDF文档——路径C:\PdfBox_Examples\中的sample.pdf,它的第一页包含一个图像,如下所示。
本示例演示如何将上述PDF文档转换为图像文件。在这里,我们将检索PDF文档第一页中的图像并将其保存为myimage.jpg。将此代码另存为PdfToImage.java
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序检索给定PDF文档中显示以下消息的图像。
Imagecreated
如果您验证给定的路径,您可以观察到图像已生成并保存为myimage.jpg,如下所示。
PDFBox-添加矩形
本章教您如何在PDF文档的页面中创建颜色框。
在PDF文档中创建框
您可以使用PDPageContentStream类的addRect()方法在PDF页面中添加矩形框。
以下是在PDF文档页面中创建矩形形状的步骤。
第1步:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有的PDF文档。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
第2步:获取页面对象
您需要使用PDDocument类的getPage()方法检索要在其中添加矩形的所需页面的PDPage对象。对于此方法,您需要传递要添加矩形的页面的索引。
PDPagepage=document.getPage(0);
第3步:准备内容流
您可以使用名为PDPageContentStream的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递前面步骤中创建的这两个对象来实例化此类,如下所示。
PDPageContentStreamcontentStream=newPDPageContentStream(document,page);
第4步:设置非描边颜色
您可以使用PDPageContentStream类的setNonStrokingColor()方法将非描边颜色设置为矩形。对于此方法,您需要将所需的颜色作为参数传递,如下所示。
contentStream.setNonStrokingColor(Color.DARK_GRAY);
第五步:画矩形
使用addRect()方法绘制具有所需尺寸的矩形。对于此方法,您需要传递要添加的矩形的尺寸,如下所示。
contentStream.addRect(200,650,100,100);
第6步:填充矩形
PDPageContentStream类的fill()方法用所需的颜色填充指定维度之间的路径,如下所示。
contentStream.fill();
第7步:关闭文档
最后使用PDDocument类的close()方法关闭文档,如下所示。
document.close();
例子
假设我们在路径C:\PdfBox_Examples\中有一个名为blankpage.pdf的PDF文档,其中包含一个空白页,如下所示。
此示例演示如何在PDF文档中创建/插入矩形。在这里,我们将在空白PDF中创建一个框。将此代码另存为AddRectangles.java。
使用以下命令从命令提示符编译并执行保存的Java文件。
执行后,上述程序会在PDF文档中创建一个矩形,显示以下图像。
Rectanglecreated
如果您验证给定路径并打开保存的文档-colorbox.pdf,您可以观察到其中插入了一个框,如下所示。