Mac OS X:如何根据文件名称在目录中合并pdf文件


30

我想根据文件名称自动将数百个pdf文件合并到目录中。

例如

文件 1000.1.pdf 1000.2.pdf 1000.3.pdf 1000.x.pdf应合并为1000.pdf

2000.abc.pdf 2000.def.pdf 2000.ghi.pdf 2000.jkl.pdf 2000.5.pdf2000.pdf

我不想使用基于Preview / Automator(如果可用)的解决方案,因为与Adobe Acrobat或PDFpen等第三方软件相比,经常合并pdf文件(取决于源文档)会导致文件大小显着增加(请参见例如在预览中保存时导致PDF文件大小增加的原因是什么?

你有什么建议?谢谢!


合并PDF总是会增加文件大小,这到底是什么问题?
nohillside

1
@patrix我说的是要合并的数百个文件。如上所示,使用Mac OS X附带的不同工具,文件大小可能会大大增加。为什么我要合并的文本文件有时会增加几百个百分点
lejonet

2
@patrix,lejone8希望自动合并PDF文件,但比例为1 + 1 = 2,而不是1 + 1 = 5吗?或更大的文件大小。此外,lejonet8明确指出,与第三方产品相比,由于苹果产品的性能较差,因此无法使用Apple产品!我不知道您为什么删除我的评论,但是就这样吧。
Ruskes

1
我不了解自动化要求。按名称组织(排序)文件,然后在所需类别中选择所有文件,然后单击任何可用程序(例如此处回答的程序)或其他程序,即可进行合并,非常简单快捷。生成的文件大小将取决于PDF文件的类型和内容,因此1 + 1 = 2是不可能的。lejonet8似乎与苹果程序为什么要创建比其他程序更大的pdf文件有关。祝你好运。
Ruskes

2
您能否编辑问题以更详细地描述“自动化”对您的意义(对于那些花时间为您的问题提出解决方案的人来说,这意味着不同的事情)?是什么触发文件合并?应该使用哪种模式来找到匹配的文件?乍一看,尤其是DW的答案似乎是高度自动化的,但您的问题背后可能还有比我们现在知道的更多的答案。
nohillside

Answers:


25

试试pdftk。它是可以连接PDF文件的命令行软件(也可以执行许多其他操作,但这与此处无关)。您可以从pdftk官方网页下载它。

示例语法:

pdftk old1.pdf old2.pdf old3.pdf cat output new.pdf

将创建该文件new.pdf的包含文件的串联old1.pdfold2.pdfold3.pdf

要解决您的问题,请使用示例文件名:

pdftk 1000.*.pdf cat 1000.pdf
pdftk 2000.*.pdf cat 2000.pdf

等等。如果需要,您可以使用Shell脚本使之完全自动化(但是您必须花一些时间自己学习如何编写Shell脚本)。


假设所有文件都命名为1000.x,2000.x等,那么shell脚本可能看起来像这样

#!/bin/bash

for n in {1..9}; do
    if [[ -r ${n}000.1.pdf ]]; then
        rm -f ${n}000.pdf
        pdftk ${n}000.*.pdf cat ${n}000.pdf && mv ${n}000.*.pdf ~/.Trash/
    fi
done

感谢您的评论,但我看不到满足我需要的工作流在哪里(数百个具有相似名称的文件,根据这些名称合并)。
lejonet

1
@ lejonet8,这正是命令行工具大放异彩的地方!我已经编辑了答案,为您提供了如何执行此操作的示例。制定更多细节可能超出此问题的范围,并且与如何编写Shell脚本有关。
DW

谢谢您的回答。不幸的是,在我的文件上运行它导致出现此错误消息:错误:页面范围末尾出现意外文本,此处:1000.pdf
lejonet

1
@ lejonet8也许您可以在问题中详细说明自动化要求。您是否正在寻找诸如“文件夹动作”之类的东西?什么会首先触发串联过程?
nohillside

3
@ lejonet8,您可能需要尝试一下才能了解如何使pdftk发挥作用。不幸的是,没有上下文的错误消息不足以帮助我诊断问题。尝试串联一些文件对。实验。查看您是否可以诊断pdftk何时/不起作用以及原因。阅读教程。然后,在适当的Stack Exchange网站或其他问答网站上发布有关使pdftk工作的问题。FWIW,pdftk对我来说非常可靠,可以处理由许多不同程序生成的各种pdf文件。当然,您的经验可能会有所不同。
DW

52

Automator.app中隐藏了一个Python脚本,该脚本连接了.PDF文件

/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --help
Usage: join [--output <file>] [--shuffle] [--verbose]

用法示例:

/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf

2
谢谢您的回答。我无法评论技术背景(在Automator和Preview中合并可能有所不同)。根据源文件的不同,文件大小也会显着增加。我只是再次对其进行了测试,并将四个文件大小总计为12 mb的文件加入了32 mb的文档中。这是无法接受的。
lejonet

抱歉,不能帮您。
阿库恩

4
我将此命令作为别名添加到~/.bash_profile文件中,如下所示:alias catpdf="/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf"这样我就可以cd进入包含PDF的目录并运行catpdf
斯图尔特·麦克唐纳

2
支持巧妙地使用隐藏在APP中的Python脚本!我决定使用pdftk以获得更强大的解决方案。
Blairg23 2015年

1
@lejonet技术背景是,正如您所猜测的,两者都使用相同的框架(10.11上的Quartz.CoreGraphics)。从“ join.py”脚本的第一行(import语句)可以看出这一点。
hans_meine 2016年

8

您可以将pdfunite搭配使用poppler。您可以poppler使用Homebrew 安装:

brew install poppler

现在使用它:

pdfunite input1.pdf input2.pdf input3.pdf output.pdf

poppler还配备了这些命令:pdfdetachpdffontspdfimagespdfinfopdfseparatepdftocairopdftohtmlpdftoppmpdftopspdftotext,除了pdfunite


0

pdftk在El Capitan上不再起作用!(作业系统X 10.10)

另一种选择是PDFTron的Pagemaster。语法为:

pagemaster -m *.pdf -o output.pdf

由于它使用了自定义PDF库,因此没有上述Automator解决方案的文件大小增加问题。

注意:这不是免费工具。该演示版在每个页面上都添加了一个细水印。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.