我正在尝试在下面的 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)
.
.
.
所以你能帮我理解为什么我们会看到这个错误吗?
因为您是从命令行运行 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 中找到字体。