2017-05-12 14 views
1

xsltを使用してXMLからPDFを構築します。 pdfファイルでは、テーブル全体や一部の領域(背景色を持つブロックコンテナ)のようないくつかの領域でハイパーリンクを作成する必要があります。 < fo:basic-link external-destination = "http:// ..." >を使用しようとしましたが、成功しませんでした。これはテキストでは機能しますが、ブロックコンテナやテーブルでは機能しません。誰かがそれを行う方法を知っているなら、助けてください。私はSaxonとApache FOPを使用しています。fo:block-containerとfo:tableにハイパーリンクを作成するには?

答えて

2

fo:basic-linkhttps://www.w3.org/TR/xsl11/#fo_basic-link)は、リンクを作成するための唯一のオプションです。あなたが見つけたように、fo:basic-linkは「インライン」FOです。 https://www.w3.org/TR/xsl11/#d0e6532

%block;%inline;のFOの分類を参照してください。ただし、fo:basic-link%block;コンテンツを許可するように定義されているので、あなたはfo:basic-linkfo:tableを置くことができるはずです。それでも解決しない場合はそれが「インライン」FOだともfo:basic-link内で許さ以来

fo:block 
    fo:basic-link 
    fo:table 

、しかし、あなたは、あなたのfo:tablefo:inline-container内に置くことができる:すなわち、のように入れ子に使用します。あなたのフォーマッタが正しいことが別の質問ですが、両方の方法を動作するはずでしょうかどうか

fo:block 
    fo:basic-link 
    fo:inline-container 
     fo:table 

:あなたは次のように入れ子の構造で終わるだろう。

+0

@TonyGrahamありがとうございます。私が以前に試した最初の勧告はうまくいかなかった。今私は "fo:inline-container"を使って2番目のものを試しています。このソリューションをテーブルに適用すると、次のページに完全に移動しました。テーブルにハイパーリンクがあります。それで、それは部分的に働いた。私は自分のテーブルに「キープ・アワン」を使用しませんでした。これで遊ぶ必要があるかもしれません。 ブロック位置が絶対位置(3垂直ブロック)のページにも適用されます。うまくいきませんでした。後で私は、このサイトが許すならば、私が期待したものと持っているものをアップロードします。 – Practician

+0

'fo:inline-container'は1行だけを満たすように見え、1行は分割されません。 'block-progression-dimension.maximum = "100%" overflow = "repeat" ''(https://www.w3.org/TR/xsl11/#fo_inline-containerとhttps:// wwwを参照してください) .w3.org/TR/xsl11 /#overflow)、フォーマッタはこれらの条件の下で 'fo:inline-container'を破る可能性があります。書式設定モデルを実際に悪用したい場合は、固定列幅を使用している場合に限り、各表の行を別々の 'fo:inline-container'の別の表に置くことができます。 fo:block/fo:inline-container/fo:block-container/fo:tableを試すことができます。 –

0

@ TonyGrahamの答えはテーブルのために働いた。私のページのほとんどは少なくとも。いくつかのテーブルにはまだ問題がありますが、何らかの方法で解決できると思います。推奨されたソリューションは:

fo:block 
    fo:basic-link 
    fo:inline-container 
     fo:table 

絶対配置されたブロックコンテナについては、私は別の解決策を考え出しました。この場合、いくつかの不便があり

<fo:block-container position="absolute" left="6.15cm" top="1.31cm" height="6cm" width="9.32cm" overflow="hidden"> 
    <fo:block> 
     <fo:basic-link> 
      <xsl:attribute name="external-destination"> 
       <xsl:text>url(</xsl:text> 
       <xsl:value-of select="$my-url"/> 
       <xsl:text>)</xsl:text> 
      </xsl:attribute> 
      <fo:instream-foreign-object> 
       <svg xmlns="http://www.w3.org/2000/svg" height="130" width="260" viewBox="0 0 260 130"> 
        <text></text> 
       </svg> 
      </fo:instream-foreign-object> 
     </fo:basic-link> 
    </fo:block> 
</fo:block-container>

:ジャストブロックコンテナの前に私は、空のSVGオブジェクト内のハイパーリンクを持つ別の同じ大きさ(も絶対位置で)ブロック・コンテナを作成しました。ポイントでSVGビューボックスのサイズを取得するために、私はInkscapeグラフィックエディタ(ブロックコンテナのサイズはセンチメータ単位)を使用しました。

関連する問題