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

时间:2019-04-04 07:04:35

标签: pdf ghostscript

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

我发现很多答案说要用pdfjam / pdfnup做到这一点。我尝试过,但似乎仅当要连接的每个项目都具有相同尺寸时,否则我只是无法使其正常工作。

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

作为一个例子,我缝在一起的物品看起来很像这样:

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

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

1 个答案:

答案 0 :(得分:1)

我的答案here包含一个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

移动当前点。

这就是您需要的所有操作,将它们组合在一起由您决定。您将需要计算出最终最终“页面”的大小,并以设置为媒体大小的Ghostscript开头(使用-dDEVICEWIDTHPOINTS和-dDEVICEHEIGHTPOINTS),然后需要计算出每个页面在该页面上的位置“子页面”(请记住,原始位置在PDF的左下角)将移至该位置,绘制页面,并为每页重复。

最后,您需要执行:

showpage

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

//runpdfend exec                                             %% End the PDF file

因此,在当前的实现中,它可能是平凡的,但如您所见。再次让我指出,这不适用于大于9.26的Ghostscript版本。