我有一个非常奇怪的问题:我正在尝试将包含Unicode字符(希腊语)的Jasper报告导出为PDF。我的问题是,一个特定的希腊字符(字符三角形)打印在与我正在使用的字体(Arial)不同的字体中!
从导出的pdf中复制以下图像:
以下图像与使用相同字体的MS Word中的文本相同:
如您所见,第三个字母(delta)与其他字母不同。对于所有字体大小,此信件仅适用于此字母。我也尝试将字体更改为garamond,但仍然遇到完全相同的字母同样的问题!
最后,我应该补充说iReport的内部预览是好的,也可以导出到其他格式,如docx或html ...
更新20/04/11:我还尝试使用福昕阅读器便携式打开PDF文件,但其行为与Adobe Acrobat Reader完全相同。
更新28/04/11:我创建了一个snippet in pastebin,在导出为pdf时会产生问题。一个警告 - 您必须通过iReport的“选项 - 字体”“安装”您将使用的字体(在我的情况下为Arial),否则您将无法在pdf中看到任何内容。
更新05/03/13解决方案:好吧,因为有些人(可能来自希腊)仍然遇到同样的问题并且查看了这个问题,我想再做一次更新:我开始了再次使用Jasper报告,但现在我使用的是更新版本的Jasper(Jasper 5)和iReport(iReport 5)。现在一切正常 - 在PDF中没有问题的增量:)所以如果您遇到同样的问题,请尝试升级您的iReport和Jasper库!
更新05/04/13最终评论:两年后,我能够再次使用有问题的希腊字符(delta)在系统上工作,并能够得出一些关于问题:首先,我将我们使用的Jasper版本升级到5.x并且仍然遇到了问题!只有当我使用从iReport 5.x创建(导出)的新字体扩展名(.jar)更改了包含的字体扩展名(.jar)时,问题才得以解决。因此,问题是当导出字体扩展名时,iReport 3.x(用于导出旧扩展名)没有正确导出希腊字符增量,而iReport 5.x导出它很好。所以我的建议仍然是正确的:任何有此问题的人都会将您的Jasper版本升级到5.x,但也会通过iReprot 5.x重新导出您的字体扩展名。我真的希望我不再对此做任何更新:)
答案 0 :(得分:2)
字体扩展名。答案是字体扩展。 (答案总是字体扩展名。)
当我运行你的报告时,我得到了不同的结果:我没有看到任何希腊字符。我可以通过更改字体来解决它。或者我可以通过添加Arial作为字体扩展来解决它。 (或者我可以通过将Arial放入某个类路径来解决它......但是不要那样做。它要求麻烦。)我前段时间写了font extensions。创建它们是为了解决此类问题。这就是你应该使用的。
因为报告对我的表现不同,我只能确定这是答案。请告诉我们。
答案 1 :(得分:1)
如果有人来看,我在从PHP和FPDF生成PDF文件时遇到了类似的问题。就我而言,问题(和解决方案)是: 当FPDF通过MakeFont生成字体信息文件(font.php)时,它会创建/差异编码序列(在PDF规范中定义) 然后将其嵌入PDF文件中。 / Differences序列使用“Adobe Glyph List”中的名称(http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt),它与Unicode字形名称不同...看看这个列表,我找到了以下条目:
Delta;2206
Deltagreek;0394 <-- this is the correct unicode point
FPDF库使用“Delta”名称,(我认为)是为了显示数学“delta”符号。
通过修补生成的.php字体信息文件,并将“Delta”更改为“Deltagreek”,问题就解决了。每个字体信息文件只需执行一次。
虽然以上内容适用于PDF和FPDP以及PHP,但我怀疑你遇到了与Jasper相同的问题。您需要检查Jasper如何处理编码等。
希望这有助于某人:)