如何将文件夹中每个 PDF 的第一页合并?如果可能的话,我想使用命令行应用程序来执行此操作。目前我正在使用PDFtk软件使用这样的命令:
pdftk *.pdf cat output all.pdf
但我不知道如何合并第一页每个pdf。我读过相关cat
论点,但我仍然不知道该怎么做。
更新:
命令:
pdftk *.pdf cat 1-2 output all.pdf
获取由 shell 运算符扩展的最后一个 pdf 的前两页*.
......
更新2:
我设法做了我想要做的事情,但是是手动的,所以不使用*.
shell 运算符:
pdftk 1.pdf 2.pdf cat 1 1 output combined.pdf
一个假想shell 脚本如下:
pdftk *.pdf cat repeat(1, COUNT(*.pdf)) output combined.pdf
repeat(C, N) -> repeat the character C N times
COUNTOF(*.pdf) -> get the number of PDF files the folder
答案1
在以下命令中,在连接之前,-dFirstPage=1
和-dLastPage=1
分别应用于每个 PDF:
gs -dFirstPage=1 -dLastPage=1 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf *.pdf
答案2
我如何将文件夹中每个 pdf 的第一页合并?
嗯,使用pdftk您可以通过 Windows 中的命令行 shell 完成此操作,像这样使用几个暂存目录和一个简单的 FOR 循环来相应地迭代 pdftk 命令。。。
请注意,带有空格的文件夹名称需要在文件夹名称周围加双引号,并且文件夹路径中也需要加双反斜杠。例如D:\\"test folder"\\*.pdf
,,C:\Test\\"Output 1"
等等。
批处理脚本
@ECHO ON
SET PDFDir=C:\Users\User\Desktop\Test
SET newPDFDir=%PDFDir%\new
SET combinedDir=%newPDFDir%\combined
IF NOT EXIST "%newPDFDir%" MD "%newPDFDir%"
IF NOT EXIST "%combinedDir%" MD "%combinedDir%"
IF EXIST "%combinedDir%\*.pdf" DEL /Q /F "%combinedDir%\*.pdf"
IF EXIST "%newPDFDir%\*.pdf" DEL /Q /F "%newPDFDir%\*.pdf"
:IteratePDFtk
FOR %%F IN ("%PDFDir%\*.PDF") DO pdftk %%~F cat 1 output "%newPDFDir%\%%~NXF"
CD /D "%newPDFDir%"
pdftk %newPDFDir%\*.pdf cat output %combinedDir%\combined.pdf
EXPLORER "%combinedDir%"
GOTO EOF
更多资源
答案3
由于 pdftk 不再可用,因此这是我在 Ubuntu Bionic 中使用的:
mkdir temp && find . -maxdepth 1 -name '*.pdf' -type f -exec bash -c 'qpdf --empty --pages "$1" 1 -- "temp/${1%.pdf}_1.pdf"' bash {} \; && qpdf --empty --pages temp/*.pdf -- out.pdf && rm -r temp
简要描述:1)创建一个临时文件夹,2)提取每个 pdf 文件的第一页并存储在临时文件中,3)合并该文件夹中的所有文件,4)删除该文件夹。
答案4
安装 Ghostscript 后:
如果 PDF 文件包含重音符和空格,请使用 Windows 键 + R 和 打开命令终端 cdm /U
。使用 cdm.exe 添加路径
set path=C:\Program Files (x86)\gs\gs9.23\bin
更改目录
cd ...
使用以下方法创建文件列表(由于有空格,文件名写在引号之间):
(for /f "delims=" %f in ('dir /b /s /c *.pdf') do @echo "%f") > file.txt
在 Notepad++ 或简单的记事本中检查文件是否以 UTF8 正确保存,然后
gswin32c -dFirstPage=1 -dLastPage=1 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf @file.txt