将多页 PDF 转换为 PNG 并返回 (Linux)

Posted

技术标签:

【中文标题】将多页 PDF 转换为 PNG 并返回 (Linux)【英文标题】:Convert multipage PDF to PNG and back (Linux) 【发布时间】:2012-03-31 09:26:50 【问题描述】:

我有很多 PDF 文档要转换为 PNG,在 Gimp 中编辑,然后保存回多页 Acrobat 文件。我正在填写表格并添加扫描签名,尽量避免打印、签名,然后再扫描回来,并且能够键入我需要输入的信息。

我一直在尝试使用 Imagemagick 转换为 png 文件,这似乎工作正常。我使用命令convert -quality 100 -density 300x300 multipage.pdf single%d.png (我不确定质量参数是否适合 png)。

但我在保存回 PDF 时遇到问题。有些文件的页面大小错误,我已经尝试了我能找到的所有命令和过程,但总是有一些奇怪的大小。分辨率似乎有所不同,因此在一定的缩放级别下看起来不错,但是有几页被指定为大约 2 英寸宽,或者它们是 8.5x11 但其他的大约是 35 英寸宽。我已经尝试确保 Gimp 的画布大小和分辨率正确,并将分辨率保存在文件中,但这似乎并不重要。

我用来保存文件的命令是convert -page letter -adjoin single*.png multipage.pdf 我试过其他参数,但似乎都不重要。

如果有人有任何想法或替代方案,我将不胜感激。

【问题讨论】:

我认为您可以直接使用 GIMP 编辑 PDF。 如果您想要在 pdf 页面上添加签名图像作为覆盖,您可以使用一些 pdf 工具来完成此操作,而无需转换为 png。 @Blender:Gimp 导入 PDF,但实际上并未保存为 PDF;至少在 Linux 上,它将打印为 PDF,但只能打印单个图像,而不是我想要的多页 PDF。 @Dan D:我需要添加签名和日期,并且需要在每个文件的不同位置,完全不相似。但是,如果您知道其他可能运行良好的工具,我很想了解它们。 【参考方案1】:

“我不确定质量参数是否适合 PNG。”

对于 PNG 输出,-quality 设置与 JPEG 的质量设置非常不同(它只是一个从 0100 的整数)。

对于 PNG,它由两个单个数字组成:

第一个数字(十位)是(主要是)zlib 压缩级别,它可能从 09(但是0 的设置有一个特殊的含义:当你使用它时,你会得到 Huffman 压缩,而不是 zlib 压缩级别 0。这通常更好......很奇怪但确实如此。)

第二位是PNG数据编码过滤器类型(压缩前):

0 是无, 1 是“子”, 2 是“向上”, 3 是“平均”, 4 是“Paeth”,并且 5 是“自适应的”。

实际上这意味着:

对于具有纯色序列的插图,“无”滤镜 (-quality 00) 通常是最合适的。 对于自然风景照片,“自适应”过滤 (-quality 05) 通常是最好的。

“我在保存回 PDF 时遇到问题。有些文件的页面大小错误,我已经尝试了所有可以找到的命令和程序 [...]被指定为大约 2 英寸宽,或者它们是 8.5x11,但其他的大约是 35 英寸宽。”

由于没有可用的 PNG 文件,我创建了一些具有不同尺寸的简单文件来验证不同的命令(因为我不再确定自己了)。确实,您使用的那个:

convert -page letter -adjoin single*.png multipage.pdf

确实以(相同)字母大小创建所有 PDF 页面,但它始终将我的(不同大小)PNG 样本放在 PDF 页面的左下角。 (如果 PNG 超过 PDF 页面大小,它会缩小它们以使其适合 - 但它不会放大较小的 PNG 以填充可用的页面空间。)

对命令的以下修改会将 PNG 放置在每个 PDF 页面的中心:

convert           \
  -page letter    \
  -adjoin         \
   single*.png    \
  -gravity center \
   multipage.pdf

如果这对您来说仍然不够好,您可以通过添加 -scale '590!x770!' 参数来强制(可能不成比例!)缩放以几乎填满字母区域(这将在每个边缘留下 11 pt 的边框页):

convert              \
  -page letter       \
  -adjoin            \
   single*.png       \
  -gravity center    \
  -scale '590!x770!' \
   multipage.pdf

要去掉多余的边框,请使用-scale '612!x792!'。 -- 如果您只想在需要时向上缩放,同时保持 PNG 的纵横比,请使用-scale '590<x770<'

convert              \
  -page letter       \
  -adjoin            \
   single*.png       \
  -gravity center    \
  -scale '590<x770<' \
   multipage.pdf 

【讨论】:

谢谢。我现在才刚刚开始我的假期,但是当我回来时,我会尝试你的一些建议,看看它们是如何工作的,但即使它不起作用,你也应该为这些努力点赞。 :) 嘿 :-) -- 但我很确定它有效。如果我总是能得到“努力”的支持,我现在已经是富翁了:-)【参考方案2】:

为什么不直接使用Xournal?这就是我用来注释 PDF 的方法

【讨论】:

谢谢,我不使用它的原因是我以前从未听说过它。不过,这听起来很有希望,当我度假回来时,我一定会研究一下。我会在几周后重新讨论这个话题。

以上是关于将多页 PDF 转换为 PNG 并返回 (Linux)的主要内容,如果未能解决你的问题,请参考以下文章

ImageMagick 将具有多页的 pdf 转换为高质量的 PNG

Ghostscript错误使用pdfwrite将多页PS转换为多页PDF

ImageMagick或GhostScript:将多页TIFF转换为多页PDF

使用python将多页pdf文件拆分为多个pdf文件?

多页Excel转换成PDF时如何保存为单独文件

Ghostscript 多页 PDF 转 PNG