在 Linux 中从命令行拆分 PDF 文档?

sda*_*aau 31 linux pdf command-line

我想使用 Linux 中的命令行将 PDF 文档中的页面范围提取到一个新的 PDF 文档中。注意:

$ pdftk input.pdf cat 1 详细输出 output.pdf
错误:无法打开 PDF 文件: 
   输入.pdf
遇到错误。没有创建输出。
完毕。输入错误,因此没有创建输出。

结果是“你(应该)知道 Pdftk 只不过是一个非常旧的 iText 版本......上面语句中的关键字是“非常旧”。 ”(来自pdftk 无法打开 pdf 文件

 

$ java -classpath /path/to/Multivalent20091027.jar tool.pdf.Split -page 1 input.pdf
线程“main”中的异常 java.lang.NoClassDefFoundError: tool/pdf/Split
引起:java.lang.ClassNotFoundException:tool.pdf.Split
    在 java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    在 java.security.AccessController.doPrivileged(Native Method)
    在 java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    在 java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    在 java.lang.ClassLoader.loadClass(ClassLoader.java:247)
找不到主类:tool.pdf.Split。程序将会退出。

事实证明,这是一个有点棘手的软件:即使它在 SourceForge 上,并此处说“实用思想慷慨地提供这些工具可在命令行上免费使用” -但是,此处则说:“浏览器已打开源。文档工具是免费的,而不是开源的。 ” ...最终澄清了来自转换的评论- 胶合(拼版)PDF 文档 - 堆栈内存溢出

从官方 sourceforge 站点链接的 Multivalent 的所有版本都缺少工具包。

编辑:似乎有一个包含工具的旧 Multivalent 版本,请参阅 SO 链接;但由于它看起来有点像废弃软件,我宁愿不使用它

 

  • 最后,我想避免使用本质上是 Latex 前端的工具,如PDFjam

 

那么,在Linux下有没有这样的pdf分割命令行工具的选择?

小智 42

我发现 pdfseparate 非常方便地将范围拆分为单个页面。此命令会将第 1 - 5 页提取input.pdf到名为output-page1.pdf, output-page2.pdf, 的文件中...

pdfseparate -f 1 -l 5 input.pdf output-page%d.pdf
Run Code Online (Sandbox Code Playgroud)

如果您想将它们重新组合成页面范围,例如一个文档中的第 1-3 页和另一个文档中的第 4-5 页,您可以使用配套程序 pdfunite,如下所示:

pdfunite output-page1.pdf output-page2.pdf output-page3.pdf final-pages1-3.pdf
pdfunite output-page4.pdf output-page5.pdf final-pages4-5.pdf
Run Code Online (Sandbox Code Playgroud)

我相信这些工具是 poppler 的一部分,可能已经安装在您的系统上。


小智 9

在 debian 上使用 pdftk 2.02 对我有用,但我认为它也应该对你有用。

pdftk input.pdf cat 2-4 output out1.pdf
Run Code Online (Sandbox Code Playgroud)

对于必须将单个 pdf 拆分为多个文件的一般情况,我找不到使用 pdftk 的方法,因此我使用的是 Bash 脚本。


Flo*_*low 8

您可以使用该pdfjam工具的语法

pdfjam <input-file> <page-ranges> -o <output-file>
Run Code Online (Sandbox Code Playgroud)

页面范围的一个例子是

3,67-70,80
Run Code Online (Sandbox Code Playgroud)

资料来源:https ://tex.stackexchange.com/questions/79623作者:Vincent Nivoliers


sda*_*aau 4

我将把这个作为答案,以免堵塞问题:这里是 unix.se 上的相关链接:

...并且接受的答案使用带有 PyPDF 的 Python 脚本(但该答案实现了将一页分成两部分 - 因此需要针对页面范围修改该脚本,以使其按照 OP 中的要求工作)。

 

编辑:我刚刚发现这个:Stapler - 基于 pypdf 的用于操作 PDF 文档的 python 实用程序(第 3 页)/社区贡献/Arch Linux 论坛;这显然是“一个利用 pypdf 库提供 pdftk 的(稍微)更轻的替代方案的小实用程序”(但是请注意,邮件列表指出了它的一些问题)...