gpt4 book ai didi

pdf - FOP 不显示西里尔字符

转载 作者:行者123 更新时间:2023-12-04 12:47:39 34 4
gpt4 key购买 nike

我需要帮助在 Java 中使用 FOP 显示西里尔字符。
我创建了内容的 xml 和将格式化新 PDF 的 xsl 文件。

它们都使用 UTF-8 字符编码。

但在结果文件中,我只看到“#”字符而不是西里尔字符。

我试图用 XmlSpy 创建 resultxml。看起来不错。我想我缺少一种字体。如何在 FOP 配置中添加字体?如果可能的话,请给我一个详细的例子。

这是Java代码:

    Document xslDoc = getConverterXsl(index);
FopFactory fopFactory = null;
fopFactory = FopFactory.newInstance();
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, pdfOutputStream);
Result res = new SAXResult(fop.getDefaultHandler());
doXslTransform(index, xslDoc, fopDoc, res);

这是xsl:
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>
<xsl:param name="versionParam" select="'1.0'"/>
<!-- ========================= -->
<!-- root element: ReportRoot -->
<!-- ========================= -->
<xsl:template match="ReportRoot">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simpleA4" page-width="21cm" page-height="29.7cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm" font-family="Arial">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simpleA4">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="16pt" font-weight="bold" space-after="3mm"><xsl:value-of select="projectname"/>
</fo:block>
<fo:block font-size="10pt">
<fo:table table-layout="fixed" width="100%" border-collapse="separate">
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="5cm"/>
<fo:table-body>
<xsl:apply-templates select="ReportContent"/>
</fo:table-body>
</fo:table>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<!-- ========================= -->
<!-- child element: PlatInfo -->
<!-- ========================= -->
<xsl:template match="ReportContent">
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:attribute name="font-weight">bold</xsl:attribute>
<xsl:value-of select="PlatNumber"/>
</fo:block>
<fo:block>
<xsl:value-of select="PlatValue"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:attribute name="font-weight">bold</xsl:attribute>
<xsl:value-of select="Country"/>
</fo:block>
<fo:block>
<xsl:value-of select="CountryValue"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:leader />
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:leader />
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:attribute name="font-weight">bold</xsl:attribute>
<xsl:value-of select="Image"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:external-graphic height="12cm" width="24cm" content-height="scale-down-to-fit" content-width="scale-down-to-fit">
<xsl:attribute name="src"><xsl:value-of select="ImageSrc"/></xsl:attribute>
</fo:external-graphic>
</fo:block>
<fo:block>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block break-before="page">
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block font-size="14pt" space-after="1mm" font-family="MS Mincho">
<xsl:value-of select="//StaticText/Text1"/>
<xsl:value-of select="//ShortEditFields/EditField[1]/Value" />
<xsl:value-of select="//StaticText/Text2" />
<xsl:value-of select="//ShortEditFields/EditField[2]/Value" />
<xsl:value-of select="//StaticText/Text3" />
<xsl:value-of select="//PlatValue"/>
<xsl:value-of select="//StaticText/Text4" />
<xsl:value-of select="//DateValue"/>
<xsl:value-of select="//StaticText/Text5" />
<xsl:value-of select="//TimeHour"/>
<xsl:value-of select="//StaticText/Text6" />
<xsl:value-of select="//TimeMinute"/>
<xsl:value-of select="//StaticText/Text7" />
<xsl:value-of select="//StaticText/Text8" />
</fo:block>
<fo:block>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>
</xsl:stylesheet>

最佳答案

您必须安装正确的字体。 #只是缺少西里尔 unicode 字母的字形。您可以找到有关 FOP 字体处理的一些信息 here .有好的tutorial - 这有点比扎 git 定,但您可以了解主要思想。

关于pdf - FOP 不显示西里尔字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24524133/

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