有没有一种方法可以使用 dompdf 和 ghostscript 添加到合并的 pdf 的链接
Is there a way to add links to merged pdfs with dompdf & ghostscript
我正在尝试为多个 PDF 文档创建一个目录页面,其中将在每个(与 GS 合并的)pdf 的开头包含 links。
目前我有:
充当内容页面的 HTML 页面,要转换为 domPDF(这部分有效)
几个部分分隔页(用 domPdf 转换的 PDF)里面有 X 部分锚点
要合并其他 PDF 文档以创建 1 个带有目录页面的大型 PDF。
我是 运行 shell 的 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。
但是,link 不起作用。
PDF 似乎无法 link 到目标位置在其原始文件之外的文档。
如果我在内容文件中添加 link,并且目标是相同的内容文件..最终输出 PDF 呈现 links 并且它们按需要运行。
所以,我的问题是,是否可以在合并的 PDF 文档中包含一个 link,以便 link 到其他合并的 PDF 文件。
任何指示或建议都会很有帮助。
谢谢
大卫
是的,这里的问题是 Ghostscript 在处理第一个文件时无法知道最终文件中有多少页,更重要的是这些页的对象编号是多少。
现在 Link 注释的 /Dest 可能类似于 [page /XYZ left top zoom]
'page' 在这种情况下是一个页面对象,它是对 PDF 对象的间接引用,因此第 1 页上引用第 2 页的 /Link 可能类似于:
[18 0 R /XYZ 0 792 1]
如果我们假设第 2 页是输出 PDF 文件中的对象编号 18。
处理注释时,PDF 解释器会将它们作为对输入 PDF 文件执行的最后一件事来执行。这意味着所有页面都是完整的,因此 pdfwrite 设备知道第 2 页有(例如)对象编号 18。因此确定哪个页面与哪个对象编号相关联没有问题。
但在你的情况下,你是 运行 第一个文件,然后是 运行 注释(在执行第二个文件之前)。那时,一个或多个链接指向一个尚不存在的页面。由于无法知道执行后续文件时该页面的对象编号 going 是多少,因此 pdfwrite 设备无法处理 Link 注释.
所以恐怕你不能用 Ghostscript 轻松地做你想做的事。事实上,我看不出你怎么能让你的内容文件合法地包含这种 Link。
您可以尝试一下,但这比将文件串在一起要难得多。您可以将所有 Link 注释留在第一页上,一起处理所有 PDF 文件,然后在处理完所有 PDF 文件后发送大量 pdfmark 指令,这些指令描述了您想要的 Link 注释创建。
当然我可能漏掉了重点;你没有提供任何示例文件来查看,所以我无法判断你的文件目前正在使用哪种 Link 注释和目标。
顺便提一下,pdfwrite 设备不支持 'merge' PDF 文件,这是一个复杂得多的过程。您可以找到记录的过程 here,我认为它值得一读,这样您就可以了解设备在这种情况下的能力和局限性。
从根本上说,Ghostscript 和 pdfwrite decice 并非旨在用作 PDF 编辑或操作工具。
我正在尝试为多个 PDF 文档创建一个目录页面,其中将在每个(与 GS 合并的)pdf 的开头包含 links。
目前我有: 充当内容页面的 HTML 页面,要转换为 domPDF(这部分有效) 几个部分分隔页(用 domPdf 转换的 PDF)里面有 X 部分锚点 要合并其他 PDF 文档以创建 1 个带有目录页面的大型 PDF。
我是 运行 shell 的 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。
但是,link 不起作用。
PDF 似乎无法 link 到目标位置在其原始文件之外的文档。
如果我在内容文件中添加 link,并且目标是相同的内容文件..最终输出 PDF 呈现 links 并且它们按需要运行。
所以,我的问题是,是否可以在合并的 PDF 文档中包含一个 link,以便 link 到其他合并的 PDF 文件。
任何指示或建议都会很有帮助。
谢谢
大卫
是的,这里的问题是 Ghostscript 在处理第一个文件时无法知道最终文件中有多少页,更重要的是这些页的对象编号是多少。
现在 Link 注释的 /Dest 可能类似于 [page /XYZ left top zoom] 'page' 在这种情况下是一个页面对象,它是对 PDF 对象的间接引用,因此第 1 页上引用第 2 页的 /Link 可能类似于:
[18 0 R /XYZ 0 792 1]
如果我们假设第 2 页是输出 PDF 文件中的对象编号 18。
处理注释时,PDF 解释器会将它们作为对输入 PDF 文件执行的最后一件事来执行。这意味着所有页面都是完整的,因此 pdfwrite 设备知道第 2 页有(例如)对象编号 18。因此确定哪个页面与哪个对象编号相关联没有问题。
但在你的情况下,你是 运行 第一个文件,然后是 运行 注释(在执行第二个文件之前)。那时,一个或多个链接指向一个尚不存在的页面。由于无法知道执行后续文件时该页面的对象编号 going 是多少,因此 pdfwrite 设备无法处理 Link 注释.
所以恐怕你不能用 Ghostscript 轻松地做你想做的事。事实上,我看不出你怎么能让你的内容文件合法地包含这种 Link。
您可以尝试一下,但这比将文件串在一起要难得多。您可以将所有 Link 注释留在第一页上,一起处理所有 PDF 文件,然后在处理完所有 PDF 文件后发送大量 pdfmark 指令,这些指令描述了您想要的 Link 注释创建。
当然我可能漏掉了重点;你没有提供任何示例文件来查看,所以我无法判断你的文件目前正在使用哪种 Link 注释和目标。
顺便提一下,pdfwrite 设备不支持 'merge' PDF 文件,这是一个复杂得多的过程。您可以找到记录的过程 here,我认为它值得一读,这样您就可以了解设备在这种情况下的能力和局限性。
从根本上说,Ghostscript 和 pdfwrite decice 并非旨在用作 PDF 编辑或操作工具。