将目录中的每个 PDF 文件另存为另一个 PDF(操作类似于将 PDF 打印为 PDF)

将目录中的每个 PDF 文件另存为另一个 PDF(操作类似于将 PDF 打印为 PDF)

考虑以下过程:

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

相关内容