【发布时间】: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