![解决方案](https://linux22.com/image/63873/%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.png)
您知道当您有一个 pdf 文档时,它是文档的扫描件,而且是一个非常大的文件,因为它只存储扫描文档的图片?
有 OCR 工具可以帮助您制作仅存储文本的正确文档吗?
好吧,我需要相反的!假设我有一个完美的 pdf 文档pdflatex
,我需要将它变成一个“巨大”的 pdf,它在纸上打印时看起来完全一样(具有一定的 dpi 值),但只是原始图片。
我最初的想法是将 pdf 转换为一系列 JPG,然后再转换回 PDF,但也许有一些规范的方法?
如果您想知道为什么我想做这样的事情:我目前被网络打印机困住了,它不是由我维护的,并且会随机丢弃打印文件中的字符!因此,在有人弄清楚那里出了什么问题之前,我希望将此作为解决方法。
答案1
您可以测试基于图像的 PDF 是否也被污染。首先将 PDF 转换为(多页)TIFF,例如鬼脚本:
gs -sDEVICE=tiffg4 -o sample.tif sample.pdf
然后将 TIFF 转换为 PDF,例如:
tiff2pdf -z -f -F -pA4 -o sample-img.pdf sample.tif
这会生成一个 PDF 文件,其中页面是图像而不是文本。
或者,如果您的系统支持打印 TIFF 文件,请尝试直接打印。
还有一个pdf2ps
将 PDF 转换为 PS 的选项,如果可行的话,可能会更好。
答案2
答案3
解决方案
以下代码以 1200 DPI 进行光栅化a.pdf
,c.pdf
首先以 2400 DPI 进行光栅化,然后在输出之前缩小 2。文档。
gs -dNOPAUSE -dBATCH -sDEVICE=pdfimage24 -r2400 -dDownScaleFactor=2 -o c.pdf a.pdf
如果只需要黑白打印,可以替换pdfimage24
为pdfimage8
以加快速度。
基准
可以看到,上面的解法是最快的,只输给pdf2ps
+ ps2pdf
(但是pdf2ps
+ps2pdf
是不保证光栅化文件),以及pdf2ppm
(但转换以.jpg
放大文件)
解决方案 | 所用时间(秒) | 占用内存 (KiB) | 输出文件大小(KiB) | 打印时间(秒) |
---|---|---|---|---|
pdftoppm (1200) ( .jpg ) + img2pdf (†) |
2.710 | 603092 | 10341.3 | |
pdf2ps +ps2pdf 带有临时文件(来源) (*) |
4.110 | 37596 | 1706.4 | |
pdfimage8 (1200) |
4.180 | 35668 | 2348.6 | 9.5 |
pdfimage24 (1200/2) |
5.020 | 36088 | 1971.9 | 9.7 |
pdfimage24 (1200) |
6.520 | 36212 | 3316.1 | |
pdf2ps +ps2pdf 带管道 (*) |
7.230 | 37668 | 1706.4 | |
convert (600) |
9.560 | 964532 | 5953.6 | |
pdftoppm (1200) ( .tiff ) + img2pdf (†) |
10.850 | 1539512 | 14483.3 | |
convert (600) +gs 优化 (来源) |
12.010 | 964532 | 1989.4 | 9.9 |
pdfimage8 (2400/2) |
20.350 | 43872 | 3481.9 | |
pdfimage24 (2400/2) |
23.510 | 46484 | 4833.2 | 15.8 |
pdftoppm (1200) ( .png ) + img2pdf (来源) (†) |
33.000 | 626896 | 14127.2 |
(*):解决方案实际上并不总是光栅化 PDF,但gs
可能决定在某些情况下执行此操作(未知在哪种情况下会光栅化,可能是 PDF 太复杂的情况)。
(†):所编写的代码仅适用于 1 页 PDF 文件,但可以进行调整。
基准解决方案的详细信息
pdftoppm
(1200) ( .jpg
) + img2pdf
(†)
pdftoppm -progress -r 1200 -jpeg a.pdf a
img2pdf a-1.jpg -o c.pdf
pdf2ps
+ps2pdf
带有临时文件(来源) (*)
gs -sDEVICE=ps2write -dNOCACHE -sOutputFile=c.ps -q -dBATCH -dNOPAUSE a.pdf
ps2pdf c.ps c.pdf
pdfimage8
(1200)
gs -dNOPAUSE -dBATCH -sDEVICE=pdfimage8 -r1200 -o c.pdf a.pdf
pdfimage24
(1200/2)
gs -dNOPAUSE -dBATCH -sDEVICE=pdfimage24 -r1200 -dDownScaleFactor=2 -o c.pdf a.pdf
pdfimage24
(1200)
gs -dNOPAUSE -dBATCH -sDEVICE=pdfimage24 -r1200 -o c.pdf a.pdf
pdf2ps
+ps2pdf
带管道 (*)
gs -sDEVICE=ps2write -dNOCACHE -sOutputFile=- -q -dBATCH -dNOPAUSE a.pdf -c quit | ps2pdf - c.pdf
convert
(600)
convert -density 600 a.pdf c.pdf
pdftoppm
(1200) ( .tiff
) + img2pdf
(†)
pdftoppm -progress -r 1200 -tiff a.pdf a
img2pdf a-1.tif -o c.pdf
convert
(600) +gs
优化 (来源)
convert -density 600 a.pdf b.pdf
gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=c.pdf b.pdf -q
pdfimage8
(2400/2)
gs -dNOPAUSE -dBATCH -sDEVICE=pdfimage8 -r2400 -dDownScaleFactor=2 -o c.pdf a.pdf
pdfimage24
(2400/2)
gs -dNOPAUSE -dBATCH -sDEVICE=pdfimage24 -r2400 -dDownScaleFactor=2 -o c.pdf a.pdf
pdftoppm
(1200) ( .png
) + img2pdf
(来源) (†)
pdftoppm -progress -r 1200 -png a.pdf a
img2pdf a-1.png -o c.pdf
可以找到基准测试的源代码这里。