Jasper iReport 中的问题在 Chrome 中生成 PDF
Posted
技术标签:
【中文标题】Jasper iReport 中的问题在 Chrome 中生成 PDF【英文标题】:Issue in Jasper iReport generated PDFs in Chrome 【发布时间】:2020-04-11 06:13:45 【问题描述】:我正在使用 Jasper iReport 5 中的条件格式生成中文以及其他几种语言的文档。我的 lib 文件夹中有 iTextAsian.jar。生成的 PDF 在 IE、Firefox、Adobe、Foxit 中显示中文,但 不是 Chrome。
在 Chrome 中,所有的汉字都不见了。我将 isPdfEmbedded 设置为 true。这是我分配给中文字段的样式。我没有嵌入吗?
<style name="DynamicFont" isDefault="true" forecolor="#000000" backcolor="#FFFFFF" isBlankWhenNull="false" fontName="SansSerif" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" isPdfEmbedded="true">
<conditionalStyle>
<conditionExpression><![CDATA[$Flocale.toString().compareToIgnoreCase("am_ET") == 0]]></conditionExpression>
<style mode="Transparent" forecolor="#000000" fontName="SansSerif" pdfFontName="Amharic-Eng-Regular.ttf" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
</conditionalStyle>
<conditionalStyle>
<conditionExpression><![CDATA[$Flocale.toString().compareToIgnoreCase("vi_VN") == 0]]></conditionExpression>
<style mode="Transparent" forecolor="#000000" fontName="SansSerif" pdfFontName="customizationsFonts/Roboto-Regular.ttf" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
</conditionalStyle>
<conditionalStyle>
<conditionExpression><![CDATA[$Flocale.toString().compareToIgnoreCase("zh_CN") == 0]]></conditionExpression>
<style mode="Transparent" forecolor="#000000" fontName="SansSerif" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
</conditionalStyle>
</style>
这是 Chrome 问题还是与我使用 iReport 生成 PDF 的方式有关?
非常感谢您的时间和耐心。
约翰
-- 编辑--
这是一个示例文件:[example.pdf]:http://www.easleybooks.com/example.pdf
【问题讨论】:
请分享一个示例pdf。 @mkl - 这是一个示例文件:[example.pdf]:easleybooks.com/example.pdf 尽管您使用了isPdfEmbedded="true"
,但您的示例 PDF 中的字体没有完全嵌入(既不是子集也不是完整的)。 Chrome 是否可能根本无法访问 STSong-Light 字体?
@mkl - 这就是我所担心的,奇怪的是 Chrome 没有访问权限,但 Firefox、adobe、foxit、linux 下的 chrome 可以。无论如何,您对我如何实际嵌入这些 cmap 文件有任何想法吗?如果你喜欢,我可以给你字体。如果您认为这只是 Jasper 的问题,我可以忍受,但我希望我可以嵌入这些字体。 :(
此外,越南语也有效,但它是 .TTF 字体。 STSong 是 JAR 中的 .properties 文件,似乎是“cmap”类型的字体。我对字体不太熟悉,但是字符映射似乎与TTF有很大不同。我想知道它是否可以嵌入?
【参考方案1】:
我假设您的代码中没有错误,因为如果存在任何错误,其他浏览器也无法正确显示您的报告。您可以尝试这些步骤来避免您的问题。
-
您的某些 chrome 扩展程序会中断您的报告生成。在那里禁用您的 chrome 扩展程序。
打开您的 Chrome developer tools 并再次运行您的代码,看看控制台中是否生成任何错误。
根据discussion 的说法,chrome 中存在一个阻止中文和日文字母显示的错误。在那里将您的 chrome 更新到最新版本。
尝试通过 自定义和控制(扳手图标)> 工具 > 编码 >选择 Unicode (UTF-8) 在最新的 chrome 中设置设置
如果这些解决方案不起作用,请尝试将 jasper 更新到最新版本。看中文和日文的时候看到jasper老版本有问题。
更新-:
您在代码中使用了您的中文字体为pdfFontName="STSong-Light"
。尝试使用任何Chinese simplified font 打印您的 pdf,因为在 Firefox 中,您的中文理解为两种字体(Microsoft YaHei 和 Yu Gothic)的集合,但在 Chrome 中,即使启用了 acrobat 扩展,它也无法理解该语言。 你必须在你的pdf中更改你的中文字体名称。
【讨论】:
“如果存在任何错误,其他浏览器也无法正确显示您的报告。” - 众所周知,pdf 查看器会尝试在后台修复错误,但不同的是观众有他们修复的不同的错误集。因此,您错了,如果 OP 生成的报告不正确,它们仍然可能在某些查看器中显示为所希望的,而在其他查看器中显示为不同。尽管如此,它也可能只是一个 chrome 问题,在这种情况下,您提到的步骤可能会有所帮助。 大部分时间 chrome 不支持 pdf 甚至一些 css 等。我大部分时间都遇到过这些问题。那里因为我曾经使用 Firefox,但 OP 需要在 chrome 上运行它。我看到 很多讨论关于 chrome 在报告生成时不支持中文和日文。在这种情况下,报告可以在除 chrome 之外的所有浏览器中查看,那么我认为这个问题是由于 chrome 而发生的。 这里很很可能是 chrome 问题,但考虑到提供的数据,还不确定 确定,创建的可能也有问题pdf文件。这就是我想指出的。 @mkl,Kalana - 我做了上面所有的事情,没有任何改变,但是其中一个链接确实让我觉得我应该在 Linux 下的 Chrome 中尝试它 - 它确实在那里工作。明天我将尝试对其中一个中文 PDF 进行小演示。 这是一个示例文件:easleybooks.com/example.pdf以上是关于Jasper iReport 中的问题在 Chrome 中生成 PDF的主要内容,如果未能解决你的问题,请参考以下文章
打印信息,通过.jasper工具将集合输出到PDF文件 然后利用打印机打印文件
jasperreport ireport 怎么获取list<map<string,object>>数据