4

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

我只在全新安装的带有 OpenJDK 6 的 Ubuntu 9.04 上对其进行了测试,但我很确定我之前在 Linux 上看到过类似的问题。我还尝试使用其他 Java PDF 应用程序打开 PDF,例如 SwingLabs PDFRenderer 和 IcePDF Demo Applet,它们也遇到了同样的问题。在 Windows 上,它们都可以很好地呈现文档。我还在同一台 Ubuntu 机器上使用默认的 PDF 查看器 evince 打开了该文档。Evince 在没有字体问题的情况下渲染了文档,所以我很确定这是一个一般的 Java + Linux 问题。

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

任何帮助表示赞赏。

4

10 回答 10

6

OpenJDK 必须推出受版权保护的字体。安装 Sun 的 Java,字体会更好一些。

于 2009-09-01T05:54:14.510 回答
3

我在 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.offfc-cache -f测试...

如果它有效,您的默认字体替换也很糟糕,您应该恢复该目录并测试每个文件。

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

更新

在 Ubuntu 12.04 上,我遇到了类似的问题,所有 Java 字体都是粗体。删除/etc/fonts/conf.d/65-nonlatin.conf解决了问题。

于 2012-03-01T02:47:01.687 回答
1

PDF 查看器应该提供 8 个标准字体系列,您不需要嵌入这些字体系列。否则他们将被替换。PDF 在其他 PDF Java 开源查看器(Multivalent、JPedal)中是什么样的?

于 2009-09-02T07:09:52.523 回答
1

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

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

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

于 2010-09-20T23:20:14.983 回答
1

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

也可以是字体——尝试指定不同的字体。您正在使用的那个可能只是在 Linux 上渲染得很糟糕——有些就是这样。Palatino是我发现特别糟糕的一个。

于 2009-09-01T05:57:49.680 回答
1

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

于 2009-09-01T05:59:22.173 回答
1

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

于 2012-06-22T04:21:03.223 回答
0

字体是否嵌入在 PDF 中?

于 2009-09-01T08:45:15.553 回答
0

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

于 2009-09-01T06:23:05.807 回答
0

我尚未对其进行测试,但根据inductiveautomation.com 上的此论坛帖子,您可以通过安装字体来纠正它:

sudo apt-get install msttcorefonts

并在 Java 字体的属性中为 arial 更改 lucidasans:

sudo nano /usr/lib/jvm/java-6-sun/jre/lib/fontconfig.properties
于 2013-02-25T16:16:28.887 回答