【问题标题】:Issue in Jasper iReport generated PDFs in ChromeJasper iReport 中的问题在 Chrome 中生成 PDF
【发布时间】: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[$F{locale}.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[$F{locale}.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[$F{locale}.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有很大不同。我想知道它是否可以嵌入?

标签: fonts jasper-reports export-to-pdf chinese-locale


【解决方案1】:

我假设您的代码中没有错误,因为如果存在任何错误,其他浏览器也无法正确显示您的报告。您可以尝试这些步骤来避免您的问题。

  1. 您的某些 chrome 扩展程序会中断您的报告生成。在那里禁用您的 chrome 扩展程序。
  2. 打开您的 Chrome developer tools 并再次运行您的代码,看看控制台中是否生成任何错误。
  3. 根据discussion 的说法,chrome 中存在一个阻止中文和日文字母显示的错误。在那里将您的 chrome 更新到最新版本。
  4. 尝试通过 自定义和控制(扳手图标)> 工具 > 编码 >选择 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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 2015-07-29
  • 2023-03-18
相关资源
最近更新 更多