使用 Imagemagick 将 JPG 转换为 A4 PDF,顶部不留空白

使用 Imagemagick 将 JPG 转换为 A4 PDF,顶部不留空白

我正在尝试将不同尺寸的 JPG 文档转换为 A4 纸。 (从 NextCloud Android 应用程序“扫描文档”功能拍摄的文档照片)。但这个问题也可以通过下面这张猫的图片重现。

我试过

convert -page A4 -background white in.jpg out.pdf

但这在页面顶部留下了一个空白。

我希望 jpg 能够在顶部对齐。

输出11

convert -page A4 -gravity north -background white in.jpg out.pdf

但现在我基本上得到了一个全白的页面。

在 Inkscape 中打开文件时,我意识到输入被放置在页面之外的某个位置。

输出2

这里出了什么问题?

根据评论编辑:

convert -page A4 -gravity north -background white +repage cat-stairs.jpg /tmp/out.pdf不起作用 - 也许这真的是一个但是,添加原始 jpg 以供参考。

原始输入JPG

版本信息:

Version: ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP 
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib

答案1

这里出了什么问题?

据我所知,这是一个错误。


ImageMagick 可能不是合适的工具。

一般来说,ImageMagick 的convert解决方案通常是包罗万象的解决方案,但通常是最慢的解决方案,并且 ImageMagick 可能是现有服务器上远程代码执行漏洞被利用最多的库,因此也许至少看看它的兄弟 GraphicsMagick ,这对内存的需求较小。

在这种非常特殊的情况下,最好不要使用其中任何一个,因为它们基本上采用任何类型的输入文件,将其渲染为内存中的位图,然后将位图保存为指定的输出文件格式。

在您的特殊用例中,PDF 完全能够嵌入 JPEG 文件。不应该进行任何有损再压缩。所以:不要!

@nobody的评论非常有用,简而言之,你编写一个文本文件,内容如下:

将其另存为magicpage

#!/usr/bin/env zsh
infile="$1"

fname="$(mktemp --suffix=.tex magicpage.XXXXX)"
>"${fname}" print -R '
\documentclass[a4paper]{article}
\usepackage{background}
\backgroundsetup{
  placement=top,
  scale=1,
  angle=0,
  opacity=1,
  contents={\includegraphics[width=\paperwidth,height=\paperheight,keepaspectratio]{\imagename}}
}
\begin{document}
\thispagestyle{empty}
\,
\end{document}
'
pdflatex -jobname "${infile:r}" "\\def\\imagename{${infile}}\\input{${fname}}" > /dev/null

然后,使用 使其可执行chmod 755 /path/to/magicpage。您现在可以在同一目录中运行/path/to/magicpage yourimage.jpg并获取 a 。yourimage.pdf

相关内容