Xslt 如何使用ApacheFop在pdf中显示指向另一个文档(image/pdf/doc/xls)的链接?

Xslt 如何使用ApacheFop在pdf中显示指向另一个文档(image/pdf/doc/xls)的链接?,xslt,xslt-1.0,xsl-fo,apache-fop,Xslt,Xslt 1.0,Xsl Fo,Apache Fop,我在pdf中显示文档(image/.pdf/.doc/.xls)的超链接时遇到问题。当用户单击超链接时,相应的文档(image/.pdf/.doc/.xls)必须显示在新窗口中 <fo:basic-link padding-left="65mm" show-destination="new" text-decoration="underline"> <xsl:attribut

我在pdf中显示文档(image/.pdf/.doc/.xls)的超链接时遇到问题。当用户单击超链接时,相应的文档(image/.pdf/.doc/.xls)必须显示在新窗口中

<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>
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>
<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>

JAVA
123
试验
图像1.jpeg
/aN2r9pT8HwKXpmvvmt2ifpz5xvmt2ifpz5xukZHBb9Wn4FL0xwW/VpD=
images2.jpeg
/aN2r9pT8HwKXpmvvmt2ifpz5xvmt2ifpz5xukZHBb9Wn4FL0x/VpD=
Books.xsl

 <?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>
<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>

<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>

书籍详情
标题:
国际书号:
作者:
图像名称:
 

<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>
中的数据采用base64编码格式。我需要使用
的内容在新窗口中显示文档。请帮我做这件事

<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>
这是2013年6月19日对凯文评论的回复

<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>
您好,凯文,我是新的xslt和xsl fo,正如您所说的,我尝试使用
提供超链接,但链接未打开以显示附加文件。下面是我正在尝试的代码

<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>

url('数据:
;base64,
')

您是否可以在这方面提供帮助。

如果您打算在PDF中包含实际内容(基本上使用PDF作为容器),则只有在您选择的XSL FO呈现程序支持PDF附件的情况下才可以这样做。既然你说的是Excel之类的东西,我想这就是你的意思

<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>
如果您选择的XSL FO引擎在呈现过程中支持PDF文件附件,则需要将base64编码文档流的内容写入PDF附件FO构造。您可以将完整编码的文档传递到文档扩展名中文件附件的“src”属性中。使用RenderX XEP,您可以在此处查看FO执行此操作的文档:

<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>

<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>
您将使用与下面类似的模板(注意,本例中的“attachmentContentType”将包含所包含内容的mimetype,您需要将其添加到输入XML中):

<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>

url('数据:
;base64,
')
要构建具有以下内容的“src”属性(使用“data:”方案将整个文档存储在src属性中),这将是文件附件扩展名的“src”属性。这将把文件作为附件嵌入到PDF中,可以通过支持此功能的PDF查看器在其本机编辑器中打开

<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>

src=“'data:image/jpeg;base64,/an2r9pt8hwkxpmvt2ifpz5xvmt2ifpz5xukzhbb9wn4fl0xww…”

感谢凯文·布朗的帮助。我在里面使用了上面的代码片段,它可以很好地在pdf中显示图像。但是需要只显示图像链接,而不是在pdf中显示图像本身。如果有任何方法,请在这方面提供帮助。问题是“何处”的图像链接。您是否计划将图像放到web上已知且可访问的位置?您不能仅仅认为在文件系统中放置指向某个对象的链接会起作用。如果您想要一个指向PDF(或任何其他文件)中图像的链接,那么在外部目标属性中使用fo:basic link和URL。您还有图像的Base64编码字节。您可以包含要在单独窗口中打开的图像或其他类型的文件的唯一方法是我上面指定的方法。您可以将文件插入PDF中
<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>