在网格中合并 pdf

问题描述 投票:0回答:1

我有数百个 pdf 文件,代表纸牌游戏的纸牌。它们是使用 LaTeX 构建的标准 2.5"x3.5" 文件。为了打印它们,我想将它们连接成一个 pdf 文件,每页 9 张卡片(最多可以容纳)。目前我使用

montage -density 300 -tile 3x3 -geometry 750x1050+50+25 a.pdf b.pdf ...

来做到这一点

不幸的是,这个解决方案存在一些问题:

  • 细节丢失——

    -density
    选项对于获得良好的质量是必要的,并且结果取决于所需的质量。我的打印机可以以 600dpi 打印,所以我应该使用
    -density 600
    ,但有些打印机无法正确处理。

  • 慢——我不使用 600 的另一个原因是,即使在 300 下,imagemagick 也非常慢,因为我认为它将 pdf 转换为图像,然后将它们连接成 pdf。

  • 有限——此外,当输入文件的数量变得足够大时,蒙太奇将崩溃而无法创建结果pdf。

  • 损失福利——最后,生成的 pdf 不会保留原始文件的元数据。最重要的是,文本不再可选。这意味着我无法在 pdf 中搜索特定卡片。

为了解决这个问题,我目前正在使用 pdfunite 制作一个长 pdf,每页 1 张卡片,然后告诉我的打印机每页打印 9 张卡片。结果相当接近预期的效果,但是卡片的尺寸略有变形,这是一个问题。

有什么方法可以将 pdf 连接到特定大小的网格中吗?

linux pdf printing merge command-line-interface
1个回答
0
投票

如果您的所有卡片都是额外 pdf 文件中的单页,那么您可以使用

foreach
循环遍历页面,并将它们放入新文件中的网格中,调用
includegraphics
并使用单个页码。

为了使网格居中,我在单页之间使用

hfill
,在下面的示例中,在 3 页之后我添加了
vspace

下面的示例代码会将

cards.pdf
的前 6 页重新排列为网格。如果您想调整原始页面的大小,可以使用
size
参数。

\documentclass[a4paper, 11pt]{scrartcl}
\usepackage{pgffor}
\usepackage{ifthen}
\usepackage{graphicx}
\usepackage{intcalc}
\usepackage[margin=1.25cm]{geometry}

\begin{document}

\foreach \i in {1, ..., 6}{
 \ifthenelse{\equal{\intcalcMod{\i}{3}}{1}}{
   \hfill
 }{}

 \includegraphics[scale=1, page=\i]{cards.pdf} \hfill

 \ifthenelse{\equal{\intcalcMod{\i}{3}}{0}}{
   % important blank line for line break
   \vspace{0.5cm}
   % important blank line for line break
 }{}
}
\end{document}

对于上面的示例,这是没有循环的等效代码。

\documentclass[a4paper, 11pt]{scrartcl}
\usepackage{graphicx}
\usepackage[margin=1.25cm]{geometry}

\begin{document}
\hfill \includegraphics[scale=1, page=1]{cards.pdf} \hfill \includegraphics[scale=1, page=2]{cards.pdf} \hfill \includegraphics[scale=1, page=3]{cards.pdf} \hfill

\vspace{0.5cm}

\hfill \includegraphics[scale=1, page=4]{cards.pdf} \hfill \includegraphics[scale=1, page=5]{cards.pdf} \hfill \includegraphics[scale=1, page=6]{cards.pdf} \hfill
\end{document}

在我的项目中,这段代码非常有效。

© www.soinside.com 2019 - 2024. All rights reserved.