如何在Linux中提取/光栅化PDF


14

我们办公室设有一台打印机,可以从USB记忆棒打印PDF文件。可以打印大多数文件,但是有些文件有问题,尤其是用Latex生成的文件。它只是拒绝打印某些PDF,它使用信使类型的字体打印一些PDF,除了方程式以外,其他打印效果很好。

我正在寻找一种将PDF“提取”为不确定格式以进行打印的方法。通过将PDF简化/规范化到任何渲染器都可以正确渲染它的程度,或者简单地使每个页面成为PDF中的600dpi光栅图像。(我可以将PDF拆分为单独的栅格图像,然后手动将其合并,但是我想要一些可编写脚本的文件。)

只要确定可以打印,输出文件的大小就没有关系,只要具有A4纸张大小(或原始大小)且分辨率为300〜600dpi。


如果打印机支持附言,则pdf2ps可能会有所帮助。
frlan 2014年

它本来应该是PostScript打印机,但是它的支持甚至比PDF还要差(并且它不会从USB记忆棒打印PS)。
桑波,2014年

Answers:


23

在尝试使用某些选项将字体呈现为轮廓(包括该问题和pstoedit)失败后,我想出了一种使用ImageMagick轻松将PDF转换为光栅化形式的方法:

convert -density 600 +antialias input.pdf output.pdf

这将创建以600 dpi渲染的PDF,并关闭了抗锯齿功能(该分辨率不必要)。

输出文件很大(一个8页的文档大约30 MB),打印速度非常慢,但是只要打印机有足够的内存来呈现内容,输出文件就可以正常工作。


1
是! 我用它来使PDF中的各层变平,从而取得了巨大的成功。+不需要使用抗锯齿,因为我们只有图像(没有区别),我将分辨率降低到150,因为这似乎足以存档而不占用太多空间。谢谢!
mlissner

2
请注意,convert这不会保留您可能已经填写的表格的内容。(我想对PDF进行栅格化,以确保表单内容在各个地方看起来都是相同的,尤其是要确保它们首先显示在每个PDF查看器中。)为了保留表单内容,请使用evince(或其他方式)应用程序(用于填写表单的应用程序)将文档“打印到文件” –这是另一个PDF,其中表单内容实际上已成为常规文本的一部分。然后,您仍然可以根据需要光栅化这个新的PDF。
balu

请注意,这将打开(+antialias)抗锯齿功能,而不是将其关闭(-antialias)。
xiii1408 '18

不,+antialias禁用抗锯齿功能:imagemagick.org/script/command-line-options.php?#antialias
Sampo

1
为了使这项工作,我需要调整imagemagick(stackoverflow.com/questions/42928765/…)。
SteveSong

1

以我的经验,使用imagemagick在高分辨率和/或大文件中不稳定。许多打印机可以达到1200 dpi或更高的分辨率,因此光栅化的文件应具有相似的分辨率。更好的解决方案是使用pdf2djvu,它速度更快,功能更强大,甚至创建的文件大小通常可以与1200或2400 dpi的原始PDF媲美。可以使用okular或evince查看和打印这些文件。

例:

pdf2djvu -d 2400 file.pdf > rastered.djvu

1

我认为目前的首选方式是:

  1. 使用pdftoppm将PDF文件转换为一系列图像。

    $ pdftoppm source.pdf输出-png

  2. 使用img2pdf从这些图像中创建一个pdf文件。

    $ img2pdf * .png -o输出.pdf

好消息是您可以创建一个bash脚本来为您自动化整个过程。

这是一个bash脚本,它将提取目录中的所有pdf文件,并将原始文件保存在新目录“ originals”中。

#!/bin/bash

mkdir "originals";
for filename in ./*.pdf; do
    pdftoppm "$filename" output -png
    mv "$filename" ./originals
    img2pdf *.png "-o" "$filename"
    rm *.png
done

积分:img2pdf答案pdftoppm答案和bash脚本帮助:12

(旁注)您可以使用以下方法安装img2pdf:

$ sudo apt安装img2pdf


-1

另一种选择是通过类似

pdf图片

在手册页中,“ Pdfimages将可移植文档格式(PDF)文件中的图像另存为可移植Pixmap(PPM),可移植位图(PBM)或JPEG文件。Pdfimages读取PDF文件PDF文件,扫描一页或多页,然后为每个图像写一个PPM,PBM或JPEG文件,图像根root-nnn.xxx,其中nnn是图像编号,而xxx是图像类型(.ppm,.pbm,.jpg)。”

然后使用pdftk转换回PDF https://www.pdflabs.com/docs/pdftk-cli-examples/

最后,打印该文件。显然,关键问题是如何编写脚本。

您可以通过一个简单的用户网页来自动执行此操作。最后,它们会打印出转换后的文件,您应该具有更高的性能并可以正常打印吗?


3
pdfimages从PDF文件中提取嵌入的光栅图像,而不是光栅化文本或矢量图形。
Sampo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.