如何连接多个不同维度的pdf文件?

如何连接多个不同维度的pdf文件?,pdf,ghostscript,Pdf,Ghostscript,我需要将多个pdf文件合并到一个单页pdf中。我需要缝合一些我生成的PDF。如果我水平缝合,则所有PDF的高度相同,但宽度不同。垂直缝合时,所有PDF的宽度相同,但高度不同 我发现很多答案都说用pdfjam/pdfnup来实现这一点。我试过了,但似乎只有当每个要连接的项目都是相同的维度时,否则我就无法让它正常工作 我真的更愿意在ghostscript中完成这项工作,因为我的PDF操作的其余部分已经在ghostscript中完成了。但我还没有找到解决办法 例如,我正在缝合的项目看起来非常像: ┌-

我需要将多个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为要从PDF文件绘制的页面获取一个从0开始的数字)

这:

移动当前点

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

最后,您需要执行:

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

//runpdfend exec                                             %% End the PDF file

因此,这是可能的,但正如您所看到的,在当前的实现中是非常重要的。让我再次指出,这将适用于大于9.26的Ghostscript版本。

这太棒了,谢谢!我不知道如何通过-c开关一行程序来运行postscript程序,但我相信谷歌搜索会帮我做到这一点。这将使工作更简单,因为所有5个窄条都是空白条。能够移动光标并绘制下一个文件,这正是我想要的答案类型。今天我要试一试,再次感谢!很明显,您需要将修改后的程序写入文件,然后像2-up.ps一样运行该文件,因此类似于:gs-sFile=2-up.psYa,对此表示抱歉。我当时在打电话,还没有找到你的另一个链接。看起来这肯定是答案,我现在只是想弄明白后记的意思。再次感谢!我试图提出一个概念证明,但惨遭失败。我的POC和我得到的输出在这里:如果你有时间,你介意看一下并告诉我问题是否出在你身上吗?如果没有,我理解。谢谢做得好!我很高兴它对你有用。恐怕你的附加评论是在晚上给我的,所以我只是看到了。你需要对很多文件这样做吗?实际上,在AcrobatPro中,这是一个相当简单的自动化操作。这是一个很好的解决方案,可以处理10个文件,但不能处理数百个文件。这是您的选择吗?这是一个我必须从命令行重复执行很多次的过程。
//runpdfend exec                                             %% End the PDF file