我有一个 PDF 文档(幻灯片),里面有用笔做的注释。对于讲义,我想以 4 合 1 的方式打印它们,因此当然包括注释。
StackOverflow 上有一些解决方案解释了如何实现这种 4 合 1 打印输出,但默认情况下这些解决方案不会保留注释。这里的问题似乎是注释位于 PDF 的不同层上,而这些将多页合并为一页的标准转换会忽略注释。
因此问题是如何在不忽略/丢弃注释的情况下完成“将多页打印到一页”的打印。
答案1
描述适用于:
Ubuntu 21.04
pdfjam 3.03
GPL Ghostscript 9.53.3 (2020-10-01)
在找到解决方案后,我创建了这个问题——以便让其他人更容易(因为我发现的一些命令已经过时了等等)。
找到解决方案的关键是知道“保留”注释称为“展平”,其本质上是将注释层放入“标准”层中。
因此,我们有三个步骤:
- 压扁:
pdf2ps -q -sOutputFile=- input.pdf | ps2pdf - out-flat.pdf
- 合并 4on1:
pdfjam --nup 2x2 out-flat.pdf --outfile out-4on1.pdf --landscape
对我来说,步骤 1 生成的 PDF 明显比原始文件大,因此第三步可能是压缩:
- 压缩:
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“印前优化”设置类似的输出。
- 默认选择的输出旨在适用于多种用途,但可能会以更大的输出文件为代价。
如果您喜欢这个解决方案,那么也请考虑喜欢我基于此解决方案的解决方案: