Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:字体在Linux上看起来乱七八糟,但在windows上很好_Java_Linux_Pdf_Openjdk - Fatal编程技术网

Java:字体在Linux上看起来乱七八糟,但在windows上很好

Java:字体在Linux上看起来乱七八糟,但在windows上很好,java,linux,pdf,openjdk,Java,Linux,Pdf,Openjdk,我正在编写一个java应用程序,将PDF文档呈现为图像,当我在windows上运行它时,效果很好。但是当我在Linux上渲染PDF时,标准字体看起来有点混乱,就像某些字符的右侧缺少一些像素一样 我只在新安装的Ubuntu9.04和OpenJDK6上测试了它,但我很肯定我以前在Linux上也看到过类似的问题。我还尝试用其他Java PDF应用程序打开PDF,比如SwingLabs PDFRenderer和IcePDF演示小程序,它们也有同样的问题。在windows上,它们都可以很好地渲染文档。我还

我正在编写一个java应用程序,将PDF文档呈现为图像,当我在windows上运行它时,效果很好。但是当我在Linux上渲染PDF时,标准字体看起来有点混乱,就像某些字符的右侧缺少一些像素一样

我只在新安装的Ubuntu9.04和OpenJDK6上测试了它,但我很肯定我以前在Linux上也看到过类似的问题。我还尝试用其他Java PDF应用程序打开PDF,比如SwingLabs PDFRenderer和IcePDF演示小程序,它们也有同样的问题。在windows上,它们都可以很好地渲染文档。我还在同一台Ubuntu机器上用默认的PDF查看器evince打开了该文档。Evince呈现文档时没有字体问题,因此我很确定这是一个Java+Linux的一般问题

用于比较:
已在Windows上呈现。
在Linux上呈现。我用红环标记了几个乱码。
也在Linux上呈现。看起来只有标准字体受到影响


非常感谢您的帮助。

OpenJDK必须提供版权保护的字体。安装Sun的Java和字体会更好

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


也可能是字体--请尝试指定其他字体。您正在使用的一个可能在Linux上表现得很糟糕——有些人就是这样。Palatino是一个我发现特别糟糕的字体。

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

尝试复制所有windows字体,并将它们放入您的linux环境。

PDF中是否嵌入了字体?

有8种标准字体系列,您不需要像PDF查看器应该提供的那样嵌入。否则将被替换。在其他PDF Java开源查看器(Multivalent,JPedal)中,PDF看起来像什么?

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

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


然后仅安装Sun/Oracle的运行时。这将安装字体,但您仍将使用openJDK的java运行所有内容。

我在Linux中安装了openJDK,所有应用程序都使用非常非常糟糕的字体。。。在多次尝试更改字体、反别名、安装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
dir)

更新
在Ubuntu12.04上,我遇到了一个类似的问题,所有Java字体都是粗体的。删除
/etc/fonts/conf.d/65 nonlatin.conf
修复了该问题。

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

我还没有测试它,但根据这一点,你可以通过安装字体来纠正它:

sudo apt-get install msttcorefonts
以及在Java字体的属性中更改用于arial的lucidasans:

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

我不认为我可以轻易地更改字体,因为它是在PDF文档中定义的,但是字体暗示听起来是个好主意。我认为乱码字体没有嵌入。PDF标准定义了一些不会嵌入的标准字体。看起来我错了。乱码字体可以是嵌入式字体。嵌入式字体也有一系列Java的潜在问题,如编码和专利问题。这取决于渲染器如何处理这些…它工作了!我还安装了一个名为“UbuntuRestrictedExtras”的软件包,它使OpenJDK中的字体更好了一点,但Sun的JRE使它们更好了。我在我的项目中使用了JPedal,并用IcePDF Webstart演示和Swinglabs PDFRenderer对其进行了测试。他们有同样的问题。问题是OpenJDK。我安装了Sun JRE,一切正常。你可能想看看这个。