Java:字体在Linux上看起来乱码,但在Windows上很好

我正在写一个Java应用程序呈现PDF文件的图像,当我在Windows上运行它工作正常。 但是,当我在Linux上渲染PDF时,标准字体看起来有点乱码,就像在某些字符的右侧会有几个像素丢失一样。

我只用OpenJDK 6的全新安装Ubuntu 9.04进行了testing,但是我确定在Linux上看到过类似的问题。 我也尝试使用其他Java PDF应用程序打开PDF,例如SwingLabs PDFRenderer和IcePDF Demo Applet,它们也有同样的问题。 在窗户上,他们都呈现文件就好了。 我也用默认的PDF查看器evince在同一台Ubuntu机器上打开了文档。 Evince呈现的文件没有字体问题,所以我很确定这是一个普通的Java + Linux问题。

为了比较:
此图像在Windows上呈现。
此图像在Linux上呈现。 我用红圈标出了一些乱码。
这个也是在Linux上渲染的。 看起来只有标准字体受到影响。

任何帮助表示赞赏。

Solutions Collecting From Web of "Java:字体在Linux上看起来乱码,但在Windows上很好"

OpenJDK必须发布受版权保护的字体。 安装Sun的Java和字体将会变得更好。

我有OpenJDK安装在Linux和所有的应用程序是非常非常糟糕的字体…在许多尝试更改字体,antialias,安装Lucida字体等我发现我的问题是在/etc/fonts/conf.d/35-freefont.conf

我只是删除该链接,运行fc-cache -f和所有新的Java应用程序有一个更好的字体。

在我的情况下,freefont配置告诉Java使用它,而不是更好的字体。 如果你有类似的问题,只需运行sudo mv /etc/fonts/conf.d /etc/fonts/conf.d.off和一个fc-cache -f然后测试…

如果它工作,你也有一个不好的默认字体替换,你应该恢复该目录和测试每个文件。

如果它保持不变,那么你可能有另一个问题(不要忘记恢复conf.d目录)

更新

在Ubuntu 12.04上,我有一个类似的问题,所有的Java字体都是粗体的。 删除/etc/fonts/conf.d/65-nonlatin.conf修复了这个问题。

可能是字体暗示坏了。 检查您正在使用的Linux操作系统的字体提示设置。

也可以是字体 – 尝试指定一个不同的。 你正在使用的那个可能只是简单地渲染在Linux上 – 一些只是做。 帕拉蒂诺是我发现特别糟糕的一个。

您可以尝试使用pdffonts来帮助您分析问题 – 它至少会告诉您PDF文件中使用的字体的名称,它们的类型(如果它们是嵌入的)。如果字体没有嵌入,您可以尝试安装它们Linux机器。

PDF阅读器应该提供8种不需要嵌入的标准字体系列。 否则将被替换。 PDF在其他PDF开放源代码查看器(Multivalent,JPedal)中看起来如何?

您可以使用openJDK并使用Sun / Oracle的字体!

首先安装openDJK(运行时和开发包)

然后只安装Sun / Oracle的运行时间。 这将安装字体,但你仍然会使用openJDK的Java运行的一切。

安装最新版本的OpenJDK。 或者启用提示重新编译Freetype。 苹果有关暗示的专利已经过期。

PDF中是否嵌入了字体?

尝试复制所有的Windows字体,并把它们放到你的Linux环境中。

我没有测试它,但根据在inductiveautomation.com这个论坛上的帖子,你可以通过安装字体来纠正它:

 sudo apt-get install msttcorefonts 

并改变了Java字体属性中的字体:

 sudo nano /usr/lib/jvm/java-6-sun/jre/lib/fontconfig.properties