如何合并不同尺寸的多个 pdf 文件?

How do I join multiple pdf files of different dimensions?

我需要将多个 pdf 文件合并成一个单页 pdf。我需要将我生成的一些 PDF 拼接在一起。如果我水平拼接,所有 PDF 的高度相同但宽度不同。当我垂直拼接时,所有 PDF 的宽度相同但高度不同。

我发现很多答案都说要用 pdfjam/pdfnup 来做到这一点。我试过了,但似乎只有当每个要连接的项目都是相同的维度时才适用,否则我无法正常工作。

我真的更喜欢在 ghostscript 中执行此操作,因为我其余的 PDF 操作已经在 ghostscript 中完成。不过我还没有找到解决方案。

举个例子,我拼接在一起的项目看起来很像这样:

┌---------------------------------------┐
┬-┬----------------┬-┬----------------┬-┬
| |                | |                | |
| |                | |                | |
| |                | |                | |
| |                | |                | |
| |                | |                | |
| |                | |                | |
| |                | |                | |
┴-┴----------------┴-┴----------------┴-┴
└---------------------------------------┘

我首先尝试水平连接形成中心部分的 5 个框。然后我需要将其与上方和下方的框连接起来。

我的回答 包含一个 PostScript 程序,它 与 Ghostscript 一起工作,并且仅适用于 9.26 以下的版本,但可以拼版。

该程序执行大量您不想要的内容,它假设您正在尝试将 2 个输入页面适合特定尺寸的媒体,并缩放和旋转页面以使其最适合。你不会想做这些的。

本质上你想将当前点移动到每一页的开始,绘制页面内容,然后将当前点移动到下一页的开始,绘制该页的内容,等等。

从广义上讲,这:

%%
%% First we open the PDF file
%%
File dup (r) file runpdfbegin pop
process_trailer_attrs

然后打开 PDF 文件:

  pdfgetpage                                             %% get the page from the PDF file, stack: -save- -save- loop -dict-
  dup /Page exch store                                   %% save a copy of the page dict inside itself
  pdfshowpage_init                                       %% initialise the page
  draw_page_content                                      %% se above, draws the graphical objects, stack -save- -save- loop

绘制页面(pdfgetpage 取一个数字,从 0 开始,用于从 PDF 文件绘制的页面)。

这个:

PageXTx PageYTx translate                                %% Move to draw page 2

移动当前点。

这就是您需要的所有操作,将它们组合在一起取决于您。您将需要计算出最终总大小 'page',并使用该设置作为媒体大小启动 Ghostscript(使用 -dDEVICEWIDTHPOINTS 和 -dDEVICEHEIGHTPOINTS),然后您需要计算出该页面上的位置每个 'sub pages'(请记住原点在 PDF 的左下角)移动到该位置,绘制页面,对每一页重复。

最后你需要执行:

showpage

以便刷新最终绘制的页面,然后理想情况下:

//runpdfend exec                                             %% End the PDF file

所以这是可能的,但如您所见,在当前的实现中并不简单。再次让我指出,这将 NOT 适用于高于 9.26 的 Ghostscript 版本。