在单个 PDF 页面上剪辑多个 PDF 图像并按彼此的尺寸缩放?

在单个 PDF 页面上剪辑多个 PDF 图像并按彼此的尺寸缩放?

我认为“montage”在这里是最合适的术语,因为在 Latex 中我们主要处理多页文档(我担心“连接”、“附加”、“收集”等术语在这种情况下可能会被误解)。我想做一些类似于 选项nup的事情,只是单独旋转和缩放。无论如何,让我通过一个使用 ImageMagick和命令pdfpages的纯图像示例向您展示我想要的东西。convertmontage


假设我有一个输入图像文件,testred.png大小为 350x250 像素,生成方式如下:

convert -size 350x250 xc:red -pointsize 40 -draw "text 0,40 'testRED'" testred.png

然后,我有第二个图像文件:testgreen.png,大小为 300x200 像素:

convert -size 300x200 xc:green -pointsize 40 -draw "text 0,40 'testGREEN'" testgreen.png

我想要做的是:旋转第二幅图像;缩放/调整大小,使第二幅图像的旋转宽度(原始高度)与第一幅图像的宽度相匹配;将第二幅图像放置在第一幅图像下方,没有任何填充;并输出该蒙太奇的文档,没有任何边距。使用 ImageMagick 的montage,可以通过以下方式实现(注意,左括号和文件名之间必须有一个空格!\(testgreen.png):

montage       testred.png       \( testgreen.png           -rotate 90           -resize $(identify -ping -format "%w" testred.png)x       \)     -geometry +0+0 -tile 1x     testmontage.png

# ... or as single line:

montage testred.png \( testgreen.png -rotate 90 -resize $(identify -ping -format "%w" testred.png)x \) -geometry +0+0 -tile 1x testmontage.png

输出文件testmontage.png的大小为 350x775 像素:

$ file testmontage.png
testmontage.png: PNG image data, 350 x 775, 16-bit/color RGB, non-interlaced

...看起来像这样:

测试蒙太奇.png

...这就是我想要的。

请注意,这里对我来说重要的一点是,我无需在任何地方明确地用数字方式计算第二个文件的新大小(尽管我需要调用identify一个子 shell 来获取这些信息)。


现在,我想做同样的事情 - 但使用 PDF 文件。ImageMagick 的转换可以再次用于生成相同的输入文件,但作为 PDF:

convert -size 350x250 xc:red -pointsize 40 -draw "text 0,40 'testRED'" testred.pdf
convert -size 300x200 xc:green -pointsize 40 -draw "text 0,40 'testGREEN'" testgreen.pdf

虽然尺寸以像素单位指定,但在 PDF 中被解释为点单位:

$ pdfinfo testred.pdf | grep 'Page size'
Page size:      350 x 250 pts
$ pdfinfo testgreen.pdf | grep 'Page size'
Page size:      300 x 200 pts

我知道如果我将该standalone类用于单个 PDF 图像,即使没有任何明确的尺寸规范:

% file: montager.tex

\documentclass{standalone}
\usepackage{graphicx}

\begin{document}
  \includegraphics{testred.pdf}
\end{document}

...输出 PDF 文件将被调整大小,因此它与输入 PDF 大小(几乎完全)匹配:

$ pdflatex montager.tex
...
Output written on montager.pdf (1 page, 262127 bytes).
Transcript written on montager.log.
$ pdfinfo montager.pdf | grep 'Page size'
Page size:      349.999 x 249.999 pts

...这很好。

但是,我不确定如何从这里继续,因为最简单的方式是定位和获取要缩放的长度。请注意\paperwidth\linewidth等在\begin/\end部分内不会发生变化(我不知道我还能在哪里获取宽度信息); 和\par\\打开新行(所以我在下面定位)要么被忽略,要么崩溃pdflatex

我很确定tikz它可以用于此 - 但已经有一段时间了,我已经忘记了大部分内容......所以我想,让我问一个问题:)

答案1

好吧,我想我解决了它——tikz确实是可行的方法:

% file: montager.tex

\documentclass{standalone}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}

\begin{document}
  \begin{tikzpicture}
    \node[inner sep=0] (testred) at (0,0){
      \includegraphics{testred.pdf}
    };
    \draw let \p1 = (testred.west), \p2 = (testred.east) in
      node[inner sep=0,below=0mm of testred,text width={\x2-\x1}] (testgreen) {
        \includegraphics[height=\linewidth,angle=-90,origin=c]{testgreen.pdf}
      };
  \end{tikzpicture}
\end{document}

笔记:

结果是:

$ pdflatex montager.tex
...
$ pdfinfo montager.pdf | grep 'Page size' 
Page size:      350.398 x 776.074 pts

... 一点也不差!下面是生成的 PDF 图像(与 OP 中的图像几乎相同):

montager-pdf.png

...我通过以下方式获得:

convert -density 72 montager.pdf montager-pdf.png

看起来和我想要的差不多 - 所以我又恢复快乐了,:)
干杯!

相关内容