在博客文章Apache PDFBox 2中 ,我演示了将Apache PDFBox 2用作从Java代码中调用的库来操作PDF。 事实证明,Apache PDFBox 2还提供了可以直接从命令行直接使用的命令行工具 ,而无需其他Java编码。 有几种命令行工具可用,我将在本文中演示其中一些工具。
PDFBox命令行工具通过利用PDFBox的可执行JAR (带有Main-Class: org.apache.pdfbox.tools.PDFBox
java -jar
Main-Class: org.apache.pdfbox.tools.PDFBox
)来执行。 这是JAR,名称中带有“ app”,对于此特定博客文章,为pdfbox-app-2.0.2.jar
。 用于在java -jar pdfbox-app-2.0.2.jar <Command> [options] [files]
调用这些工具的通用格式。
在不带参数的情况下执行可执行JAR时,将提供一种帮助形式,其中列出了可用命令。 这显示在下一个屏幕快照中。
此屏幕快照显示此版本的Apache PDFBox(2.0.2)宣传支持ConvertColorspace, Decrypt , Encrypt , ExtractText , ExtractImages , OverlayPDF , PrintPDF , PDFDebugger , PDFMerger , PDFReader , PDFSplit , PDFToImage , TextToPDF ,和WriteDecodedDoc 。
提取文本:“ ExtractText”
我正在查看的第一个命令行工具是从PDF中提取文本。 我在以前的博客文章中演示了使用PDFBox从Java代码执行此操作。 在这里,我将使用PDFBox直接在命令行中执行相同的操作,而看不到Java源代码。 以下操作通过示例从PDF Scala中提取文本。 在我以前的文章中,Java代码在线访问了此PDF,并使用PDFBox从中提取文本。 在这种情况下,我已经通过示例下载了Scala,并针对存储在我的硬盘中C:\pdf\ScalaByExample.pdf
上的已下载PDF运行了PDFBox ExtractText命令行工具。
使用PDFBox从命令行从PDF中提取文本的命令是: java -jar pdfbox-app-2.0.2.jar ExtractText C:\pdf\ScalaByExample.pdf
。 接下来的两个屏幕快照演示了如何运行此命令及其生成的文件。 从这些屏幕快照中,我们可以看到此命令生成的文本文件默认与源PDF具有相同的名称,但扩展名为.txt
。 此命令支持多个选项,包括通过在源PDF的文件名之后放置该名称来指定文本文件的名称的功能,以及通过-console
标志(而不是通过-console
标志)将文本写入控制台而不是文件的功能。输出可以重定向)。 接下来显示有关如何指定自定义文本文件名以及如何将文本定向到控制台而不是文件的示例。
-
java -jar pdfbox-app-2.0.2.jar ExtractText C:\pdf\ScalaByExample.pdf C:\pdf\dustin.txt
-
java -jar pdfbox-app-2.0.2.jar ExtractText -console C:\pdf\ScalaByExample.pdf
来自文本的PDF:“ TextToPDF”
如果需要采用其他方法(从文本开始作为源并生成PDF),则命令TextToPDF是合适的。 为了说明这一点,我使用的是名为doi.txt
的源文本文件,其中包含美国独立宣言的一部分 :
The unanimous Declaration of the thirteen united States of America,
When in the Course of human events, it becomes necessary for one people to dissolve the political bands which have connected them with another, and to assume among the powers of the earth, the separate and equal station to which the Laws of Nature and of Nature's God entitle them, a decent respect to the opinions of mankind requires that they should declare the causes which impel them to the separation.
We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty and the pursuit of Happiness
在C:\pdf\doi.txt
处有示例文本文件的情况下,可以对它运行PDFBox的TextToPDF 。 命令java -jar pdfbox-app-2.0.2.jar TextToPDF C:\pdf\doi.pdf C:\pdf\doi.txt
(请注意,目标PDF被列为第一个参数,而源文本文件列在其中列为第二个参数)。 接下来的三个屏幕快照演示了如何运行此命令从源文本文件成功生成PDF。
从PDF提取图像:“ ExtractImages”
PDFBox命令行工具ExtractImages使得从PDF提取图像变得容易,而命令行工具“ ExtractText”使它可以从PDF提取文本。 我对这种功能的演示将从我使用南达科他州黑山(及其周边地区)的图像创建的PDF中提取四张图像,这些图像称为BlackHillsSouthDakotaAndSurroundingSights.pdf
。 接下来显示此PDF的屏幕快照。
可以使用java -jar pdfbox-app-2.0.2.jar ExtractImages C:\pdf\BlackHillsSouthDakotaAndSurroundingSights.pdf
命令使用PDFBox提取此PDF中的四张照片,如下一个屏幕快照所示。
如上一个屏幕快照所示,运行此命令将从PDF中提取四张图像。 每个提取的图像均以源PDF命名,并在名称的末尾附加连字符和计数整数。 生成的图像也是扩展名为.jpg
JPEG文件。 在这种情况下,生成的文件的名称为BlackHillsSouthDakotaAndSurroundingSights-1.jpg,BlackHillsSouthDakotaAndSurroundingSights-2.jpg,BlackHillsSouthDakotaAndSurroundingSights-3.jpg和BlackHillsSouthDakotaAndSurroundingSights-4.jpg,然后直接在提取的PDF中显示。
BlackHillsSouthDakotaAndSurroundingSights-1.jpg | BlackHillsSouthDakotaAndSurroundingSights-2.jpg |
|
|
BlackHillsSouthDakotaAndSurroundingSights-3.jpg | BlackHillsSouthDakotaAndSurroundingSights-4.jpg |
|
|
加密PDF:“加密”
Apache PDFBox使加密PDF变得容易。 例如,我可以使用以下命令对“ ExtractImages”示例中使用的PDF进行加密: java -jar pdfbox-app-2.0.2.jar Encrypt -O DustinWasHere -U DustinWasHere C:\pdf\BlackHillsSouthDakotaAndSurroundingSights.pdf
,如图所示。下一个屏幕快照:
运行crypto命令后,需要输入密码才能在Adobe Reader中打开此PDF:
解密PDF:“解密”
使用命令java -jar pdfbox-app-2.0.2.jar Decrypt -password DustinWasHere C:\pdf\BlackHillsSouthDakotaAndSurroundingSights.pdf
解密此PDF一样容易,就像下一个屏幕快照所示, java -jar pdfbox-app-2.0.2.jar Decrypt -password DustinWasHere C:\pdf\BlackHillsSouthDakotaAndSurroundingSights.pdf
。 该图像演示了当没有提供用于解密PDF的密码(或提供了错误的密码)时,抛出了InvalidPasswordException ,然后显示了成功的解密,并且我再次能够在没有密码的情况下在Adobe Reader中打开PDF。
合并PDF:“ PDFMerger”
PDFBox允许使用“ PDFMerger”命令将多个PDF合并为一个PDF。 在下一个屏幕快照中,通过使用命令java -jar pdfbox-app-2.0.2.jar PDFMerger C:\pdf\doi.pdf C:\pdf\BlackHillsSouthDakotaAndSurroundingSights.pdf C:\pdf\third.pdf
前面提到的两个单页PDF( doi.pdf
和BlackHillsSouthDakotaAndSurroundingSights.pdf
合并到一个名为third.pdf
的新PDF)中, third.pdf
了这java -jar pdfbox-app-2.0.2.jar PDFMerger C:\pdf\doi.pdf C:\pdf\BlackHillsSouthDakotaAndSurroundingSights.pdf C:\pdf\third.pdf
。
分割PDF:“ PDFSplit”
我可以使用命令PDFSplit
拆分刚刚用PDFMerger
创建的third.pdf
PDF。 这是一个特别简单的情况,因为要拆分的PDF只有两页。 命令 下一个屏幕快照对此进行了演示。
快照表明,从third.pdf
分离出来的PDF称为third-1.pdf
和third-2.pdf
。
结论
在这篇文章中,我展示了一些现成的命令行实用程序,不需要Java编码。 还有一些其他命令行实用程序,此处未演示。 通过运行PDFBox发行版随附的可执行“ app” JAR,可以轻松使用所有这些命令。 作为命令行实用程序,这些工具具有命令行工具的优点,包括运行速度快,可以包含在脚本和其他自动化工具中。 这些工具的另一个好处是,由于它们是在开源中实现的,因此开发人员可以使用这些工具的源代码来查看如何在自己的应用程序和工具中使用PDFBox API。 Apache PDFBox的命令行工具是免费提供的,并且易于使用的PDF操作工具可以在无需编写额外的Java代码的情况下使用。
翻译自: https://www.javacodegeeks.com/2016/07/apache-pdfbox-command-line-tools-no-java-coding-required.html