我需要将多个pdf文件加入到单页pdf中。我需要将我生成的一些PDF拼接在一起。如果我水平拼接,则所有PDF都具有相同的高度但宽度不同。当我垂直拼接时,所有PDF都是相同的宽度但不是相同的高度。
我发现很多答案都是用pdfjam / pdfnup做的。我试过了,但似乎只是当每个要加入的项目是相同的维度时,否则我只是无法让它正常工作。
我真的更喜欢在ghostscript中这样做,因为我的PDF操作的其余部分已经在ghostscript中完成了。我没有找到解决方案。
举个例子,我拼接在一起的物品看起来非常像这样:
┌---------------------------------------┐
┬-┬----------------┬-┬----------------┬-┬
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
┴-┴----------------┴-┴----------------┴-┴
└---------------------------------------┘
我首先尝试加入水平形成中心部分的5个盒子。然后我需要加入它上面和下面的方框。
我的答案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版本。