如何使用 Apache fop 显示 Unicode 字符?显示“?”而不是性格。

Posted

技术标签:

【中文标题】如何使用 Apache fop 显示 Unicode 字符?显示“?”而不是性格。【英文标题】:How can I display a Unicode character using Apache fop? Showing "?" instead of character. 【发布时间】:2011-12-20 10:34:55 【问题描述】:

我一直在尝试插入 Unicode 字符 ∇ 或 ▽,因此它会显示在 Apache FOP 生成的 PDF 中。

这是我到目前为止所做的:

    1234563运营商。代码是∇∇NABLA,我也可以使用▽▽一个向下的三角形。

    找到正确的代码后,我必须选择一种包含必要字形的字体,并且 Adob​​e PostScript 和 PDF 规范指定了每个 PostScript 解释器和 PDF 阅读器必须可用的 Base-14 Font Character Mapping,所以我在列表中搜索并且字体Symbol包含∇&#x2207,(没有字体包含▽▽丢弃)

    在搜索之后,我认为我应该在 xsl:fo 中使用的结果代码是:

     <fo:block font-family="Symbol">
     &#x2207;
     </fo:block>
    

    问题是当它生成 PDF 时,结果不是我预期的“∇”,而是显示“?”,我读到当它不能显示字符时,通常显示“#”,但我的代码显示“?”。

    我使用的是 Apache fop 0.95,我怀疑是那个版本导致了问题,我应该更新到 1.0,但目前是生产中使用的版本,团队负责人说很难正在升级它。

所以这就是问题所在,除了版本之外还有其他问题吗?可能是我忘了做的傻事吗? 如何使用 Apache fop 显示 Unicode 字符?

【问题讨论】:

我在 FOP 1.0 和 FOP .95 中都尝试了您的 fo:block 代码。它在两个版本中都运行良好。您可以访问 stderr 吗?如果存在字体或字形问题,您应该会收到警告。 @DevNull 实际上,我还没有在 FOP 1.0 中测试过,只是 FOP .95,我开始学习这个,你能告诉我如何访问 stderr 以查看它是否是字体或字形问题? 您可能在 Eclipse 等 IDE 中进行开发。每当您运行代码时,输​​出都会发送到控制台;默认情况下(至少在 Eclipse 中)会在该控制台中将 stderr 显示为红线。 可能您的 FOP 配置不包含适合替代 Symbol 字体的字体,或者您的 PDF 阅读器的 Symbol 字体存在问题。 @gioele 我同意你的第一个说法,也许 FOP 配置不包括合适的字体,我刚刚结束使用 svg 来绘制它,我做了所有这些研究以避免使用 svg,但在最后我无法解决它,顺便说一句,我不再使用 xsl:fo。 【参考方案1】:

尝试使用符号的十进制值(我认为您不需要 Symbol 字体系列):

需要了解特殊符号取值的大家可以找here

【讨论】:

以上是关于如何使用 Apache fop 显示 Unicode 字符?显示“?”而不是性格。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Freemarker 和 Apache FOP 将项目列表呈现为 4 个块?

如何在 Apache FOP 中设置默认语言

Apache FOP 中模板输出的总和值

如何使用 XSL-FO(和 Apache FOP)计算从应用模板返回的元素

如何在 Java 小程序中使用带有扩展名的 apache fop (f.e.barcode4j)

带有 zxing 的 Apache FOP 1.1 QRCodes