如何将多个 PDF 放在一页上(例如,四合一/四合一)并保留注释?

如何将多个 PDF 放在一页上(例如,四合一/四合一)并保留注释?

我有一个 PDF 文档(幻灯片),里面有用笔做的注释。对于讲义,我想以 4 合 1 的方式打印它们,因此当然包括注释。

StackOverflow 上有一些解决方案解释了如何实现这种 4 合 1 打印输出,但默认情况下这些解决方案不会保留注释。这里的问题似乎是注释位于 PDF 的不同层上,而这些将多页合并为一页的标准转换会忽略注释。

因此问题是如何在不忽略/丢弃注释的情况下完成“将多页打印到一页”的打印。

答案1

描述适用于:

Ubuntu          21.04
pdfjam          3.03
GPL Ghostscript 9.53.3 (2020-10-01)

在找到解决方案后,我创建了这个问题——以便让其他人更容易(因为我发现的一些命令已经过时了等等)。

找到解决方案的关键是知道“保留”注释称为“展平”,其本质上是将注释层放入“标准”层中。

因此,我们有三个步骤:

  1. 压扁:pdf2ps -q -sOutputFile=- input.pdf | ps2pdf - out-flat.pdf
  2. 合并 4on1:pdfjam --nup 2x2 out-flat.pdf --outfile out-4on1.pdf --landscape

对我来说,步骤 1 生成的 PDF 明显比原始文件大,因此第三步可能是压缩:

  1. 压缩:gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -q -o out-4on1-compressed.pdf out-4on1.pdf

请注意,对于压缩,您可以选择多种压缩率,这里选择的(电子书)最适合我的目的。更多详细信息如下。

由于我必须定期执行此操作,因此我为此创建了一个方便的脚本。希望它也能对其他人有所帮助!

#!/bin/sh

# argument 1: input filename
# argument 2: compression rate (optional)

# remove file ending to be able chaning the filename
filename=$(basename -- "$1")
extension="${filename##*.}"
prefix="${filename%.*}"

# compile the annotations inte the main layer(s)
pdf2ps -q -sOutputFile=- $1 | ps2pdf - $prefix-flattened.pdf

# put 4 slides into one per page, landscape mode
pdfjam --nup 2x2 $prefix-flattened.pdf --outfile $prefix-4on1-largeFile.pdf --landscape

# compress
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/${2:-ebook} -q -o $prefix-4on1.pdf $prefix-4on1-largeFile.pdf

# delete intermediate files
rm ./$prefix-flattened.pdf
rm ./$prefix-4on1-largeFile.pdf

不要忘记使脚本文件可执行(例如通过chmod +x 4on1-script.sh)。脚本会删除所有中间文件。它还会创建一个有用的文件名,需要“识别”文件的前缀。它的第一个参数是输入文件名。它的第二个参数是可选的,决定压缩质量。默认值是 ebook,其他值为:

  • 屏幕:选择类似于 Acrobat Distiller“屏幕优化”设置的低分辨率输出。
  • 电子书:选择类似于 Acrobat Distiller“电子书”设置的中等分辨率输出。(此处选择)
  • 打印机选择与 Acrobat Distiller“打印优化”设置类似的输出。
  • prepress 选择与 Acrobat Distiller“印前优化”设置类似的输出。
  • 默认选择的输出旨在适用于多种用途,但可能会以更大的输出文件为代价。

如果您喜欢这个解决方案,那么也请考虑喜欢我基于此解决方案的解决方案:

相关内容