有没有一种方法可以使用dompdf和ghostscript

时间:2019-05-03 11:09:09

标签: php pdf ghostscript dompdf

我正在尝试为多个PDF文档创建一个内容页面,其中将包含指向每个(与GS合并)pdf开头的链接。

目前,我有: 用作内容页面的HTML页面,将转换为domPDF(此部分有效) 几个分区分隔页(使用domPdf转换的PDF),其中包含X锚点 要合并的其他PDF文档将创建1个带有内容页面的大型PDF。

我正在外壳上运行GS来处理PDF文档的合并:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=save_path/final.pdf contents.pdf section1.pdf brochure1.pdf section2.pdf brochure2.pdf back.pdf

GS成功将PDF文档合并为1个大型PDF。

但是,链接不起作用。

PDF似乎无法链接到目标不在其原始文件之外的文档。

如果我在内容文件中添加链接,并且目的地是相同的内容文件。.最终输出PDF将呈现链接,并且链接将按需运行。

所以,我的问题是,是否可以在合并的PDF文档中包含一个链接,以链接到其他合并的PDF文件。

任何指针或建议将最有帮助。

谢谢

大卫

1 个答案:

答案 0 :(得分:1)

是的,这里的问题是Ghostscript在处理第一个文件时无法知道最终文件中有多少页,更重要的是这些页的对象号将是什么。

现在/ Link注释的/ Dest可能类似于[page / XYZ left top zoom] 在这种情况下,“页面”是页面对象,是对PDF对象的间接引用,因此引用第2页的第1页上的/ Link可能类似于:

[18 0 R / XYZ 0 792 1]

如果我们假设第2页是输出PDF文件中的对象编号18。

在处理注释时,PDF解释器将对注释执行最后的操作,即处理输入的PDF文件。这意味着所有页面都是完整的,因此pdfwrite设备知道页面2具有(例如)对象编号18。因此,找出哪个页面与哪个对象编号相关联没有问题。

但是,在您的情况下,您将完全运行第一个文件,然后运行注释(在执行第二个文件之前)。当时,一个或多个链接指向的页面尚不存在。由于无法知道执行后续文件时该页面的对象号要进入,因此pdfwrite设备无法处理链接注释。

因此,恐怕您无法使用Ghostscript轻松完成所需的操作。实际上,我什至看不到如何使内容文件合法地带有此类链接。

您可以按照某种方式进行操作,但是比将文件串在一起要困难得多。您可以将所有链接注释保留在第一页之外,一起处理所有PDF文件,然后在处理所有要描述的链接注释的所有PDF文件后发送大量pdfmark指令。

我当然会错过重点;您尚未提供任何示例文件来查看,因此我无法告诉您当前文件正在使用哪种链接注释和目标。

顺便说一句,让我注意到pdfwrite设备不会“合并” PDF文件,这是一个更为复杂的过程。您可以找到记录在here中的过程,我认为它值得一读,因此您可以对这种情况下设备的功能和局限性有所了解。

Ghostscript和pdfwrite decice根本不是PDF编辑或处理工具。