1

PDF 内のドキュメント (image/.pdf/.doc/.xls) のハイパーリンクを表示する際に問題が発生しています。ユーザーがハイパーリンクをクリックすると、対応するドキュメント (image/.pdf/.doc/.xls) が新しいウィンドウに表示される必要があります。

Books.xml

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Book xmlns="http://book.com/one/1.2/" xmlns:ns2="http://test2.com/one/1.2/" xmlns:ns3="http://test3.com/one/1.2/" >
          <Title>Java</Title>
          <ISBN>123</ISBN>
          <Author>Test</Author>
          <BookDocument>
            <ns2:DocumentName>images1.jpeg</ns2:DocumentName>
            <ns2:DocumentContent>/aN2r9pT8HwKXpmvvmt2ifpz5xvmt2ifpz5xukZHBb9Wn4FL0xwW/VpD=</ns2:DocumentContent>
          </BookDocument>
          <BookDocument>
            <ns2:DocumentName>images2.jpeg</ns2:DocumentName>
            <ns2:DocumentContent>/aN2r9pT8HwKXpmvvmt2ifpz5xvmt2ifpz5xukZHBb9Wn4FL0x/VpD=</ns2:DocumentContent>
          </BookDocument>
        </Book>

Books.xsl

<xsl:template match="*[local-name() = 'Book']">

    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <fo:layout-master-set>
            <fo:simple-page-master master-name="ex"
                page-height="29.7cm" page-width="21cm" margin-top="2cm"
                margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
                <fo:region-body />
            </fo:simple-page-master>
        </fo:layout-master-set>
        <fo:page-sequence master-reference="ex">
            <fo:flow flow-name="xsl-region-body">

                <fo:block space-after="15mm">

                </fo:block>
                <fo:block font-size="16pt" font-weight="bold" space-after="5mm">
                    Book Details
                </fo:block>

                <fo:block font-size="10pt">
                    <fo:table table-layout="fixed" width="100%"
                        border-collapse="collapse" border="solid 1px black">

                        <fo:table-body>
                            <fo:table-row>
                                <fo:table-cell border="solid 1px black" padding="1mm">
                                    <fo:block font-weight="bold">Title :</fo:block>
                                </fo:table-cell>
                                <fo:table-cell padding="1mm" border="solid 1px black">
                                    <fo:block>
                                        <xsl:value-of select="*[local-name() = 'Title']" />
                                    </fo:block>
                                </fo:table-cell>
                            </fo:table-row>

                            <fo:table-row>
                                <fo:table-cell border="solid 1px black" padding="1mm">
                                    <fo:block font-weight="bold">ISBN :
                                    </fo:block>
                                </fo:table-cell>
                                <fo:table-cell padding="1mm" border="solid 1px black">
                                    <fo:block>
                                        <xsl:value-of select="*[local-name() = 'ISBN']" />
                                    </fo:block>
                                </fo:table-cell>
                            </fo:table-row>

                            <fo:table-row>
                                <fo:table-cell border="solid 1px black" padding="1mm">
                                    <fo:block font-weight="bold">Author :</fo:block>
                                </fo:table-cell>
                                <fo:table-cell padding="1mm" border="solid 1px black">
                                    <fo:block>
                                    <xsl:value-of select="*[local-name() = 'Author']" />  
                                    </fo:block>
                                </fo:table-cell>
                            </fo:table-row>

                            <fo:table-row>
                                <fo:table-cell border="solid 1px black" padding="1mm">
                                    <fo:block font-weight="bold">Image Names :</fo:block>
                                </fo:table-cell>
                                <fo:table-cell padding="1mm" border="solid 1px black">
                                    <fo:block>
                                        <xsl:for-each select="*[local-name() = 'BookDocument']">
                                        <xsl:value-of  select="*[local-name() = 'DocumentName']"/>
                                        <xsl:text>&#160;</xsl:text>
                                        </xsl:for-each>
                                    </fo:block>
                                </fo:table-cell>
                            </fo:table-row>


                        </fo:table-body>
                    </fo:table>
                </fo:block>
            </fo:flow>
        </fo:page-sequence>
    </fo:root>
</xsl:template>

内部のデータ<ns2:DocumentContent>は base64 エンコーディング形式です。のコンテンツを使用して、ドキュメントを新しいウィンドウに表示する必要があります<ns2:DocumentContent>。これで私を助けてください。

これは、2013 年 6 月 19 日のケビンのコメントへの返信です。

こんにちは、Kevin 私はこの xslt と xsl-fo を初めて使用して<fo:basic-link>います。以下は私が試しているコードです

<fo:basic-link padding-left="65mm" show-destination="new" text-decoration="underline">
                                                    <xsl:attribute name="external-destination">
                                                           <xsl:text>url('data:</xsl:text>
                                                           <xsl:value-of select="*[local-name() = 'FileType']" />                
                                                           <xsl:text>;base64,</xsl:text>
                                                           <xsl:value-of select="*[local-name() = 'FileAttachment']" />
                                                           <xsl:text>')</xsl:text>
                                                    </xsl:attribute>
                                                    <fo:inline font-family="Arial" font-size="10pt" color="#0000ff" text-decoration="underline"><xsl:value-of select="*[local-name() = 'FileName']"/></fo:inline>
                                                    </fo:basic-link>

これで助けてもらえますか。

4

1 に答える 1

2

実際のコンテンツを PDF 内に含める場合 (基本的に PDF をコンテナーとして使用する場合)、選択した XSL FO レンダラーが PDF 添付ファイルをサポートしている場合にのみ可能です。エクセルなどと書いてあるので、その通りだと思います。

選択した XSL FO エンジンがレンダリング プロセスで PDF ファイル添付をサポートしている場合、base64 でエンコードされたドキュメント ストリームのコンテンツを PDF 添付ファイル FO 構造に書き込む必要があります。完全にエンコードされたドキュメントを、ドキュメント化された拡張子の添付ファイルの「src」属性に渡します。RenderX XEP を使用して、FO がこれを行うためのドキュメントをここで見ることができます。

PDF 注釈と添付ファイルのサポート

以下のようなテンプレートを使用します (この例の「attachmentContentType」には、含めるコンテンツの MIME タイプが含まれていることに注意してください。これを入力 XML に追加する必要があります)。

<xsl:attribute name="src">
            <xsl:text>url('data:</xsl:text>
            <xsl:value-of select="attachmentContentType"/>                
            <xsl:text>;base64,</xsl:text>
            <xsl:value-of select="encodedImageBytes"/>
            <xsl:text>')</xsl:text>
</xsl:attribute>

「src」属性を次のように構築するには (「data:」スキームを使用してドキュメント全体を src 属性に格納します)。これは、添付ファイル拡張子の「src」属性になります。これにより、ファイルが添付ファイルとして PDF に埋め込まれ、これをサポートする PDF ビューアを介してネイティブ エディタで開くことができます。

src="'data:image/jpeg;base64,/aN2r9pT8HwKXpmvvmt2ifpz5xvmt2ifpz5xukZHBb9Wn4FL0xwW...'"

于 2013-06-16T19:03:21.207 に答える