使用 imagemagick 无损旋转 PDF 文件
Posted
技术标签:
【中文标题】使用 imagemagick 无损旋转 PDF 文件【英文标题】:Lossless rotation of PDF files with imagemagick 【发布时间】:2016-11-11 21:36:30 【问题描述】:我想使用 CLI 工具旋转名为 08-file.pdf
的 351K PDF。我试过imagemagick:
convert 08-file.pdf -rotate 90 08-file-rotated.pdf
但原汁原味:
遭受严重退化:
I've tried adding the -density 300x300
argument,但是结果是一个250万的文件,比原来大了近一个数量级,是巨大的浪费。
知道如何吗?
【问题讨论】:
ImageMagick 不能直接用于 PDF。其“支持的格式”页面上的注释说它“使用 ghostScript 转换文件”;大概,到一个简单的位图,所以它可以在上面施展魔法。然后可以将结果写入各种位图格式,其中 PDF 只是其中一种。使用专门设计用于处理 PDF 的工具。 我会直接试试 Ghostscript。 Imagemagick 和 Ghostscript 都光栅化了 PDF。因此,如果您旋转 PDF 并尝试写回 PDF,则原始 PDF 将被光栅化、旋转,然后将光栅结果放入矢量 PDF 外壳中。这不是一个好方法。如果您想提高质量,请在阅读 pdf 之前增加密度,然后适当调整大小。convert -density 288 08-file.pdf -rotate 90 -resize 25% 08-file-rotated.pdf
。但我建议您寻找纯 PDF 矢量工具来做到这一点。您没有发布原始 PDF,因此我们无法对其进行测试。
【参考方案1】:
我在使用 imagemagik/convert 转换/更改 pdf 文件时总是遇到不好的结果(分辨率不好或文件很大)。使用选项 -compress -density -quality 总是令人沮丧和浪费时间(但我不是专家)。
提案一:pdftk
所以我会推荐 pdftk(你可能需要通过 apt-get install 来安装它)
试试:
pdftk 08-file.pdf cat 1-endright output 08-file-rotated.pdf
对于旧版本的 pdftk (v
pdftk 08-file.pdf cat 1-endR output 08-file-rotated.pdf
从本站的另一篇文章中,我对语法有一个简短的解释
pdftk input.pdf cat 1-endsouth output output.pdf
# \_______/ \___/\___/ \________/
# input file range | output file
# direction
你也可以看看https://linux.die.net/man/1/pdftk
编辑 2020:
提案2:qpdf
我找到了另一种等效的替代方法:qpdf,更容易记住且更强大
见QPDF manual
#Syntax (you can rotate only some pages of the document -- see the manual --
qpdf --rotate=[+|-]angle[:page-range]
# Example
qpdf in.pdf out.pdf --rotate=+180
其他值得考虑的选项
pdfjam
PDF 操作工具 (CLI) 如果 pdftk 在您的系统上不可用,请考虑。
pdfjam 看起来与 pdftk
非常相似pdfsam
这是一个使用 GUI(图形用户界面)修改 pdf 文件的工具箱。
代码是开源和多平台的。
【讨论】:
convert
确实有效,并且可以无损压缩(实际上根据编码减小了文件大小)。【参考方案2】:
请使用-compress lossless
选项:
convert -rotate 90 -compress lossless 08-file.pdf 08-file-rotated.pdf
来自文档: https://www.imagemagick.org/script/command-line-options.php#compress
Lossless 是指无损 JPEG,只有 JPEG 库已被修补以支持它。
另一种选择是使用以下命令:
jhead -cmd "jpegtran -progressive -perfect -rotate 270 &i > &o" Image-0001.jpeg
它将输出写入一个临时文件,当它成功时它将覆盖原始文件:
Cmd:jpegtran -progressive -perfect -rotate 270 "Image-0001.jpeg" > "h1xQ6q"
修改:Image-0001.jpeg
【讨论】:
使用 -compress 无损的转换会降低质量。我更喜欢在 GIMP 中打开文件,旋转它,然后使用“打印为文件”选项打印它。这是我发现的最好的解决方法。-compress jpeg
为我工作。我的问题是文件大小。以上是关于使用 imagemagick 无损旋转 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 ImageMagick 将 PNG 文件转换为 PDF 时出现粗糙的边缘