我有 3 个文件夹:
Folder 1
Folder 2
Folder 3
每个文件夹中都有 5 个 pdf 文件:
Folder 1
file1.pdf
file2.pdf
Folder 2
file1.pdf
file2.pdf
Folder 3
file1.pdf
file2.pdf
我希望每个文件夹中都有这两个文件的组合文件:
Folder 1
binder.pdf
Folder 2
binder.pdf
Folder 3
binder.pdf
有什么想法吗?不要告诉我要手动操作。这个例子只是为了向你解释我的问题。想想我有数百个文件夹。:) 也许我可以使用其他工具代替 Adobe Acrobat?!
答案1
你可以用一个简短的批处理文件和 pdftk.exe 来执行此操作(不是pdftk 生成器即 GUI 版本)。
无需安装任何东西。
准备
- 下载并提取pdftk和提取单链
- 打开 ..\pdftk\bin* 并复制执行文件和库文件到您选择的文件夹
创建一个新的文本文件并粘贴以下代码
@echo 关闭 设置本地启用延迟扩展 FOR %%A IN (%*) DO (设置命令=!命令! %%A) pdftk.exe %command% cat 输出“%~dp1binder.pdf”
- 另存为[电子邮件保护]与 pdftk.exe 和 libiconv2.dll 位于同一文件夹中
- 创建此 .cmd 的快捷方式并将其放在 sendto 文件夹中 ( Win+ R» shell:sendto)
用法
- 转到包含一些 PDF 文件的文件夹,然后选择所需数量的 PDF
- 右键单击它们并选择刚刚创建的快捷方式
一个新的粘合剂将创建同一文件夹中的 PDF,其中所有选定的 PDF 将合并为一个
更新:使用当前文件夹名称作为生成的 pdf 文件名的版本
@echo off
setlocal enabledelayedexpansion
:: Concat all paths fromselected files and save it as command
FOR %%A IN (%*) DO (set command=!command! %%A)
:: Take path from first selected file and save it as path
set path=%~dp1
echo %path%
:: Check if a trailing slash is present. If yes, remove it
IF %path:~-1%==\ SET path=%path:~0,-1%
:: Get last folder from path
FOR %%F in ("%path%") do (set lastFolder=%%~nxF)
:: Call pdftk, pass on command. use lastFolder as filename
pdftk.exe %command% cat output "%path%\%lastFolder%.pdf"
答案2
如果你使用的是 Linux(或 Mac,或任何安装了 Linux 的环境),则可以使用名为ghostscript将它们结合起来。
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=combinedpdf.pdf -dBATCH file1.pdf file2.pdf file3.pdf
您还可以使用以下命令合并当前文件夹中的所有文件
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=combinedpdf.pdf -dBATCH *.pdf
您可以下载 ghostscript这里。还有一个 Windows 版本,但我没有测试过。
答案3
我已经成功使用了上述解决方案。但是,在我的系统(Windows 7 64 位)上,代码以(显然)随机顺序添加 PDF,而不是按文件名的字母顺序添加。
为了让它按字母顺序添加文件,您需要将 sort-object 参数添加到 DIR(又名 Get-ChildItem)命令(sort-object 此处不接受任何参数,因为 filename/alphabetically 是默认值):
dir $inputfolder -r -include *.pdf -exclude $outputfile | sort-object | group DirectoryName % {& $PDFtk $.group CAT OUTPUT "$($.Name)\$outputfile" verbose}
那些文件名形式为 1.pdf 2.pdf ... 10.pdf 等而不是 01.pdf 02.pdf .. 10.pdf 的人可能也想尝试这样的变体:
pdftk *?.pdf *??.pdf *???.pdf *????.pdf cat output out.pdf
答案4
也许使用批处理方案会更好。创建并收集所有 pdf 文件作为 xxxx.abcdef.pdf。
第一部分是所谓的批次标签;第二部分是文件标识符(文件名)。每个后面的标签长度和值都相似;文件名在点之后。
例如,您的第一批包括 1111.3425.pdf、1111.76501.pdf 等。您的第二批是 22222.1432.pdf、22222.4398 等。其他批次也是如此。
然后,您可以使用自动合并软件,该软件可以处理数千个文件,为每个批次创建单独的合并。我发现这个镝不需要命令行或批处理脚本的免费软件。您可以将其下载为可移植 JAR 文件。它具有不同的自动化场景;一个在此答案中描述为标记,另一个描述为所需的文件夹。
根据您的硬件,您可以将数千个文件批量合并为预定的批次。