如果我照常发送
/Border [ 0 0 0] % [0 0 0 ] = none; [0 0 2] = debug
/Color [ .7 0 0 ]
/Action <</Subtype /URI /URI cururlname>>
/ANN % annotation type
pdfmark % call pdf operators
} def
对于 PostScript 程序,Distiller 提供了很好的链接。 Google Drive 会生成链接免费图像,GhostScript 也是如此。
如何让 Google Drive 生成实时链接或实际的 PDF 文件?
我怀疑需要一些不明显的命令行输入。
我希望在生成的 .PDF 输出上有 Google Drive 内部和网络其他地方的工作链接。
这似乎不是完整的 pdfmark 定义。没有标记,而且您似乎缺少注释的子类型(Action 有 URI 的子类型,但注释没有),也没有 Rect,这使得消费者很难知道在哪里放置注释。 ...
删除注释子类型会导致 Ghostscript 的 pdfwrite 设备将其写为文本注释(默认值)。消除矩形,但创建注释子类型 /Link,pdfwrite 设备会发出链接注释,但 Acrobat 似乎并未在任何地方实际显示它。
如果我借用 pdfmark 参考版本 9(2008 年,这是我拥有的最新版本)第 23 页的示例并将其包装为 PostScript:
%!
[ /Rect [50 425 295 445] /Action << /Subtype /URI /URI (http://www.adobe.com) >> /Border [0 0 2] /Color [.7 0 0] /Subtype /Link /ANN pdfmark
showpage
然后使用Ghostscript:
gs -sDEVICE=pdfwrite -o out.pdf test.ps
生成的文件包含一个 Annot,类型为 Link,带有 URI:
5 0 obj
<</Type/Page/MediaBox [0 0 595 842]
/Parent 3 0 R
/Resources<</ProcSet[/PDF]
/ExtGState 9 0 R
>>
/Annots[4 0 R]/Contents 6 0 R
>>
endobj
...
4 0 obj
<</Type/Annot
/Rect [50 425 295 445]
/Border [0 0 2]
/C [0.7 0 0]
/A<</URI(http://www.adobe.com)
/S/URI>>
/Subtype/Link>>endobj
哪个 Acrobat 正确显示为矩形,并在我单击它时启动我的网络浏览器。
由于你的示例不完整,我无法测试它,但我自己看不出这里有问题。
[编辑]
编辑添加以下评论的答案,在通讯网络中要写的东西太多了:
您的原始文件使用与我的答案中相同的简单 Ghostscript 命令行,生成一个带有两个链接的 PDF 文件,我可以在 Acrobat 中单击这两个链接,并使用正确的 URL 启动浏览器。所以对我来说,使用当前版本的 Ghostscript,您的代码可以按预期工作。也许我错过了一些东西。我已将输出文件放在这里
我无法回答与 Google Drive 相关的问题,我不使用它,也不知道它是如何工作的。如果它转换为 PDF,那么我看不出任何不能按原样工作的原因。
您不能将 Ghostscript 命令行构建到 PostScript 过程中,或者至少不能在之后使用它,这不是命令行的工作方式。从技术上讲,您可以使用 setpagedevice 来设置设备,而 OutputFile 则无法通过命令行以外的任何方式设置输入文件,尽管您可以使用 run 运算符。如果 Ghostscript 在 SAFER 模式下启动,那么这些都不起作用,如果 Google 使用 Ghostscript 而不是使用 SAFER,我会感到惊讶。
您可以使用乘积运算符来区分解释器,但由于它返回一个字符串,您必须编写自己的字符串比较来检查 Distiller 与 Ghostscript。显然,您的代码将根据字符串的内容执行。 Distiller 归来(Distiller),Ghostscript 归来(GPL Ghostscript)。
[编辑#2]
不幸的是,Ghostscript 命令行是一件可怕的事情:-( 没有借口,只是它是一个旧程序,数十年来由许多开发人员开发,一旦实现,就几乎不可能删除,有当有人尝试这样做时,会发出抗议的嚎叫声。
您链接到的哪一个文件不应该起作用? #21 对我不起作用,因为它使用硬编码的文件名。如果我将 Want_to_trace 设置为 false 而不是 true,它会生成一个文件。可能这不起作用,但因为我不确定会发生什么,所以很难说。
为了让文件与want_to_trace true一起使用,我必须修改程序中的所有硬编码路径。完成此操作后,我会得到一个包含工作链接的 PDF 文件(也就是说,Acrobat 将我的网络浏览器打开到您网站上的文件,或者如果我允许的话)。
你没有说当你尝试执行该程序时会发生什么,它以什么方式失败?我个人猜测,问题在于 Ghostscript 正在 SAFER 模式下执行,在这种情况下您将无法打开 JPEG 文件,它将引发无效访问错误。