2

要件は、site / pdf / etcの下にハイパーリンクがあるpdfでテキストを表示することです。これは、HTMLと同様に、ここをクリックしてリンクを開きます。

私はPlanetPressを使用してPDFを作成しています。これは基本的に、ビタミンと鉄を追加したPostScriptコードです。

テキスト内にhttp://が見つかると、Acrobatは自動的にリンクを作成します。その結果、PlanetPressはリンクを直接処理しません(Acrobatによって自動的に作成されるため)。

PDFMark PostScriptコードをPlanetPressに直接渡すことで、要件を満たす静的リンクを作成できますが、コードの数行に対して同じことを動的に実行しようとすると、リスト内の最後のリンクが各行のリンクになります。

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はよくわかりませんが、これは2つのリンクの出力のチャンクだと思います(実際のリンクであるため、リンクを切り詰めました)。

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ボックスの間に休憩が必要かもしれないと思っていましたが、これを行う方法がわかりません。ありがとう

4

1 に答える 1

3

リンクの/Rect長方形を定義します。しかし、コードの左下の値は、すべての長方形で0、0になっているようです。したがって、長方形は重なっているため、一番上の長方形(最後に作成された長方形)がクリックされたときにアクティブになります。を覚えておいてください。/Rectしたがって[ "lower left x" "lower left y" "upper right x" "upper right y" ]、最初の2つの値は長方形の左下の点を定義し、最後の2つの値は長方形の右上の点を定義します。

「今、私は4つのポイントすべてを使用して長方形を繰り返し再描画する方法を理解する必要があります」

この追加の質問を理解できるかどうかはわかりません。「ハイパーリンクの/Rectの正しい値がわかったので、そこに長方形を描画するにはどうすればよいですか?」

長方形の4つのポイントすべてを見つけるには、/Rect 値からの情報を使用するだけです。たとえば、たとえば、/Rect [ 70 680 110 690 ]長方形の4つのポイントは、(70,680)、(70,690)、(110,680)、および(110,690)です。適切な描画コマンドを使用して、その長方形を描画できます。

于 2012-10-30T19:20:36.407 に答える