gpt4 book ai didi

xslt - xslt-fo不支持utf-8吗?

转载 作者:行者123 更新时间:2023-12-04 04:17:27 26 4
gpt4 key购买 nike

我在utf-8中有一个带有编码属性的xml文件。

当我执行fop -xml xml.xml -xsl xsl.xsl -pdf pdf.pdf时,我的输出pdf损坏了utf-8字符。重要的是,xsl文件中的文本不包含utf-8字符,与xml中的文本相同。

Utf-8字符替换为#。

有什么事吗

Xsl文件:

    <?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java" version="1.0" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" version="1.0" indent="yes" encoding="UTF-8" />

<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

<fo:layout-master-set>
<fo:simple-page-master master-name="A4" margin="1cm">
<fo:region-body margin="2cm" margin-left="1cm" margin-right="1cm"/>
<fo:region-before extent="3cm"/>
<fo:region-after extent="5mm"/>
</fo:simple-page-master>
</fo:layout-master-set>

<fo:page-sequence master-reference="A4">
<fo:static-content flow-name="xsl-region-before">
<fo:block font-size="24pt" font-family="Calibri">Filmoteka</fo:block>
</fo:static-content>
<fo:static-content flow-name="xsl-region-after">
<fo:block font-size="10pt" font-family="Calibri">Wygenerowano: <xsl:call-template name="dataCzas" /></fo:block>
</fo:static-content>

<fo:flow flow-name="xsl-region-body">
<fo:block font-size="12pt" font-family="Calibri" padding-after="1cm">
<fo:table table-layout="fixed" width="100%" border="solid black 1px">
<fo:table-column column-width="8mm"/>
<fo:table-column column-width="40mm"/>
<fo:table-column column-width="40mm"/>
<fo:table-column column-width="13mm"/>
<fo:table-column column-width="65mm"/>
<fo:table-header>
<fo:table-row>
<fo:table-cell border="solid black 2px">
<fo:block font-weight="bold" background-color="#cccccc">Lp.</fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 2px">
<fo:block font-weight="bold" background-color="#cccccc">Tytuł PL</fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 2px">
<fo:block font-weight="bold" background-color="#cccccc">Reżyseria</fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 2px">
<fo:block font-weight="bold" background-color="#cccccc">Rok</fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 2px">
<fo:block font-weight="bold" background-color="#cccccc">Obsada</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<xsl:apply-templates />
</fo:table-body>
</fo:table>
</fo:block>
</fo:flow>



</fo:page-sequence>

</fo:root>
</xsl:template>


<xsl:template match="film">
<fo:table-row>
<fo:table-cell border="solid black 1px">
<fo:block><xsl:number format="1"/></fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 1px">
<fo:block font-family="Calibri"><xsl:value-of select="tytul_pol"/></fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 1px">
<fo:block font-family="Calibri"><xsl:value-of select="rezyser"/></fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 1px">
<fo:block font-family="Calibri"><xsl:value-of select="rok"/></fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 1px">
<fo:block font-family="Calibri"><xsl:value-of select="obsada"/></fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>

<xsl:template name="dataCzas">
<xsl:value-of select="java:format(java:java.text.SimpleDateFormat.new('dd MMMM yyyy, HH:mm:ss'), java:java.util.Date.new())"/>
</xsl:template>

</xsl:stylesheet>

xml文件:

http://pastebin.com/fr9fChtn

最佳答案

如果FOP将字符输出为#,则所选字体不包含表示它们的字形。

据推测这是因为您的XML输入文件包含以下行:

<kraj>Francja, USA, Włochy</kraj>

这里有问题的字符是 ł

因此,回答您的问题:FOP支持UTF-8,只是字体(在您的情况下为 font-family='Calibri')没有表示字符的方式。

如果确实如此,FOP应该按照以下方式输出警告:
WARNING: Glyph for "ł" not available in font "DejaVuSans"

现在,为了也考虑那些没有以您选择的字体显示的字符,可以一起更改输出字体,或者作为解决方法,用内联隔离它们。

例如,这是您确保为字符 Σ(数学运算符)选择正确的字体的方式:
<fo:block> 
<fo:inline font-family='Symbol'>Σ</fo:inline>
</fo:block>

有关具有FOP的字体的更多信息,请参见此页面: http://xmlgraphics.apache.org/fop/trunk/fonts.html

关于xslt - xslt-fo不支持utf-8吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20596710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com