【问题标题】:PostScript - table of hyperlinks but only one link being used for allPostScript - 超链接表,但只有一个链接用于所有
【发布时间】:2012-10-30 17:02:42
【问题描述】:

要求是在 pdf 中显示一些文本,其下方有一个指向站点/pdf/etc 的超链接 - 类似于您将看到的 HTML,请单击此处并在此处打开一个链接。

我正在使用 PlanetPress 创建 pdf,它基本上是添加了维生素和铁的 PostScript 代码。

当在文本中找到 http:// 时,Acrobat 会自动创建链接,因此 PlanetPress 不会直接处理链接(因为它们是由 Acrobat 自动创建的)。

我可以通过直接通过 PlanetPress 传递 PDFMark PostScript 代码来创建满足我们要求的静态链接,但是当我尝试对多行代码动态执行相同操作时,列表中的最终链接将成为每一行的链接。

在 PlanetPress 中,我基本上是循环遍历一个 XML 文件并将结果发送到 .ps 文件。

这是我的 PDFmarks 代码:

        passthrough('[ /Rect [ 0 0 16 '+inttostr(floattoint(&j))+' ]')
        passthrough('/Action << /Subtype /URI /URI ('+&CentreCodeLink+') >>')
        passthrough('/Count '+IntToStr(&i)+'')
        passthrough('/Subtype /Link')
        passthrough('/Border [ 1 1 1 ]')
        passthrough('/ANN pdfmark')

我已经使用 /count 字段来确定正在读取/传递到 PostScript 文件的不同值。 我使用 /rect 和 /border 字段来创建超链接区域。我认为矩形将是超链接区域的边界,但事实并非如此。 我尝试使用 moveto 来确保光标沿页面移动,但这对最终结果完全没有影响。 passthrough(' '+inttostr(floattoint(&width*72))+' '+inttostr(floattoint(&j))+'moveto')

我不太了解 PostScript,但我认为这是两个链接输出的一部分(我已将链接剪掉,因为它们是真正的链接)

0 0 *m
213.9994 30.00256 *m
0 35.00296 *m
*gr
*gs
[1 0 0 1 0 70.75305]concat
 /^PP$ {systemdict /show get exec} *bd
&body /$ 1 index 2 get store /_ 1 index 6 get store 1 get *sf
 /^PP$ {systemdict /show get exec} *bd
&bold /$ 1 index 2 get store /_ 1 index 6 get store 1 get *sf
36 12.00037 *m
36 12.00037 *m (London - Hammersmith) $
165.6 12.00037 *m
&weblinkstyle dup 0 get [9 0 0 -9 0 0] *mf *sf
 /^PP$ {systemdict /show get exec} *bd
[] 0 setdash
/$ 1 index 5 get dup 0 {1 1 0 0 *sc}*bi put store /_ exch 8 get dup 0 {1 1 0 0 *sc}*bi put store
165.6002 12.00037 *m (London - Angel) $
([ /Rect [ 0 0 540 16 ]) cvx exec
(/Action << /Subtype /URI /URI \(http://WelcomePacka5LondonAngel/\) >>) cvx exec
(/Count 1) cvx exec
(/Subtype /Link) cvx exec
(/Border [ 1 1 1 ]) cvx exec
(/ANN pdfmark) cvx exec
( 540 16 moveto) cvx exec
 /^PP$ {systemdict /show get exec} *bd
&bold /$ 1 index 2 get store /_ 1 index 6 get store 1 get *sf
36 24.00073 *m
36 24.00073 *m (London - London Bridge) $
165.6 24.00073 *m
&weblinkstyle dup 0 get [9 0 0 -9 0 0] *mf *sf
 /^PP$ {systemdict /show get exec} *bd
[] 0 setdash
/$ 1 index 5 get dup 0 {1 1 0 0 *sc}*bi put store /_ exch 8 get dup 0 {1 1 0 0 *sc}*bi put store
165.6002 24.00073 *m (London - Bridge / Borough High Street) $
([ /Rect [ 0 0 540 28 ]) cvx exec
(/Action << /Subtype /URI /URI \(http://WelcomePacka5LondonBridge/\) >>) cvx exec
(/Count 2) cvx exec
(/Subtype /Link) cvx exec
(/Border [ 1 1 1 ]) cvx exec
(/ANN pdfmark) cvx exec
( 540 28 moveto) cvx exec
 /^PP$ {systemdict /show get exec} *bd

任何想法为什么这些不起作用? 我在想也许我需要在每个 pdfmark 框之间休息一下,因为它们现在似乎共享一个边框,但我不知道该怎么做。 谢谢

【问题讨论】:

    标签: pdf postscript


    【解决方案1】:

    /Rect 确实定义了链接的矩形。但看起来代码的矩形左下角值为 0,所有矩形都为 0。所以矩形是重叠的,因此顶部的(最后一个创建的)将是单击时被激活的那个。请记住,/Rect[ "lower left x" "lower left y" "upper right x" "upper right y" ],因此前两个值定义矩形的左下角,后两个值定义矩形的右上角。

    “现在我只需要弄清楚如何使用所有 4 个点重复地重绘矩形”

    我不确定我是否理解这个额外的问题。你是在问,“现在我已经为超链接的 /Rect 设置了正确的值,我该如何在那里绘制一个矩形?”

    要找到矩形的所有四个点,您只需使用来自/Rect 的信息 价值观。例如,假设/Rect [ 70 680 110 690 ],那么矩形的四个点是 (70,680)、(70,690)、(110,680) 和 (110,690)。您可以使用适当的绘图命令来绘制该矩形。

    【讨论】:

    • 噢!感谢那!我不敢相信我查看了每个数字和空格,却没有足够注意我自己生成的数字。现在我只需要弄清楚如何使用所有 4 个点重复地重绘矩形
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多