如何使用 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,我也可以使用▽
▽一个向下的三角形。
找到正确的代码后,我必须选择一种包含必要字形的字体,并且 Adobe PostScript 和 PDF 规范指定了每个 PostScript 解释器和 PDF 阅读器必须可用的 Base-14 Font Character Mapping,所以我在列表中搜索并且字体Symbol包含∇&#x2207
,(没有字体包含▽▽
丢弃)
在搜索之后,我认为我应该在 xsl:fo 中使用的结果代码是:
<fo:block font-family="Symbol"> ∇ </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 个块?
如何使用 XSL-FO(和 Apache FOP)计算从应用模板返回的元素