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文件 然后利用打印机打印文件

如何编译 jrxml 以获取 jasper?

jasperreport ireport 怎么获取list<map<string,object>>数据

jasperreport ireport 怎么获取list<map<string,object>>数据

.jasper文件内的内容能更改吗?求高手指教.在线等

JasperReports:如何在jsp页面中调用报表