考虑以下过程:
1)使用(Ubuntu)文档查看器打开 PDF 文件。
2)转到文件
3) 转到打印
4)选择“打印为文件”并勾选“pdf”
是的,我正在将 PDF 打印为 PDF 文件。我必须对大量文件执行此操作。我想通过在终端上运行脚本来执行此操作。
也许你认为这个过程根本没有任何意义,但实际上我发现这是处理所考虑问题的唯一安全方法,这里。此 StackOverflow 问题显示了 PDF 文件的一个问题,即未找到 EOF 标记。当我执行上述步骤时,我能够解决此问题 [这不是 StackOverflow 网站中提供的解决方案,它在这里不起作用。]
我希望所有出现此问题的文件都能自动执行此操作。
我知道我应该为此建立一个脚本(.sh),但我不知道如何进行。
有问题的 PDF 文件(1)的一个例子是这里
修正后的PDF文件(2)这里
它们之间唯一的区别是,我使用“Ubuntu 文档查看器”打开了第一个,然后转到“文件”、“打印”、“打印到文件”、“输出=pdf”。
我想自动完成这个。
编辑:
我不想合并文件。
答案1
借助 Ghostscript,您可以最轻松地实现目标。我使用 Ghostscript 版本 9.26 成功测试了这一点:
gs \
-o out.pdf \
-sDEVICE=pdfwrite \
in.pdf
我必须承认,我不太理解你的问题,关于未修改示例文件在这里,因为我可以清楚地看到其中存在这个 EOF 标记。
然而,我发现你的‘已更正’示例文件在这里:这个现在使用 A4 页面尺寸(595 x 842 pts),具有较大的白色边距,而未修改的文件边距较小,页面尺寸为 362 x 558 pts(不到 A4 的一半!)
我的方法的优点是保留原始页面大小。
要将其应用于当前目录中的所有 PDF 文件(包括所有子目录),请使用以下命令:
find . -name "*.pdf" -type f | while read line; do
gs -o mod-${line} -sDEVICE=pdfwrite "${line}"
done
答案2
确保您已cups-pdf
安装并添加打印机。记下 pdf 打印机名称。(可选)编辑/etc/cups/cups-pdf.conf
:取消注释并将其中的行更改#Out /var/spool/cups-pdf/${USER}
为所需的输出目录。
然后重新启动 CUPS:sudo systemctl restart cups
现在为了打印执行以下操作:
SOURCEDIR="/path/to/source/pdfs"
for i in "$SOURCEDIR"
do
lpr -P <pdf printer name> "$i"
done
现在将文件从默认输出目录复制到所需位置(如果你没有编辑)cups-pdf.conf
安装poppler-utils
并运行pdfunite input1.pdf input2.pdf input3.pdf output.pdf
。