org.apache.fop.fo.extensions.svg.SVGElement.getDimension 无法设置 svg 的基本 URL

问题描述 投票:0回答:1

我正在尝试在 instream-foreign-object 内实现 SVG,下面是代码片段;这是 XSLT (1.0) 的代码部分;

<xsl:template name="Draft">
    <fo:block-container>
        <fo:block>
            <fo:instream-foreign-object>
                <svg:svg xmlns:svg="http://www.w3.org/2000/svg" xml:base="http://example.org/today/" >
                    <svg:defs>
                        <svg:font-face font-family="sample">
                            <svg:font-face-src>
                                <svg:font-face-uri href="sample.ttf"/>
                            </svg:font-face-src>
                        </svg:font-face>
                    </svg:defs>
                    <svg:text>
                        DRAFT
                    </svg:text>
                </svg:svg>
            </fo:instream-foreign-object>
        </fo:block>
    </fo:block-container>
</xsl:template>

现在,当我尝试从 xml 转换为 pdf 时,出现以下错误:

org.apache.fop.fo.extensions.svg.SVGElement.getDimension Could not set base URL for svg
        java.lang.IllegalArgumentException: URI is not absolute
                at java.base/java.net.URL.fromURI(URL.java:721)
                at java.base/java.net.URI.toURL(URI.java:1139)
                at org.apache.fop.fo.extensions.svg.SVGElement.getDimension(SVGElement.java:77)
.
.
.

那么您能帮我理解为什么我们会看到这个错误吗?

xml svg xslt xsl-fo
1个回答
0
投票

因为您是从命令行运行 FOP,所以您的文档有一个基本 URI。现在您已经证明您的文件系统上可以有

sample.ttf
,我建议将完整路径放入
sample.ttf

<svg:svg xmlns:svg="w3.org/2000/svg">
  <svg:defs>
    <svg:font-face font-family="sample">
      <svg:font-face-src>
        <svg:font-face-uri href="file:///PATH/for/config/sample.ttf"/> 
      </svg:font-face-src>
    </svg:font-face>
  </svg:defs>
  <svg:text> DRAFT </svg:text>
</svg:svg>

https://xmlgraphics.apache.org/fop/faq.html#svg-url 来看,FOP 似乎可以从 HTTP URL 找到字体。

© www.soinside.com 2019 - 2024. All rights reserved.