Java: Fonts look garbled on Linux, but fine on windows

Asked
Viewd9995

4

I'm writing a java application that renders PDF documents to images, and when I run it on windows it works fine. But when I render the PDF on Linux, the standard fonts look a bit garbled, like there would be a few pixels missing on the right side of some characters.

I only tested it on a fresh install of Ubuntu 9.04 with OpenJDK 6, but I'm quite sure I have seen similar issues before on Linux. I also tried to open the PDF with other Java PDF applications, like the SwingLabs PDFRenderer and the IcePDF Demo Applet, and they had the same problem. On windows they all render the document just fine. I also opened the document on the same Ubuntu machine with the default PDF viewer, evince. Evince rendered the document without the font issue, so I'm quite sure this is a general Java + Linux problem.

For comparison:
This image was rendered on Windows.
This image was rendered on Linux. I marked a few garbled characters with red rings.
This one was also rendered on Linux. It looks like only standard fonts are affected.

Any help is appreciated.

10 ответов

6

OpenJDK has to put out fonts which are copyright protected. Install Sun's Java and fonts will be somehwat better.

  • Сработало! Я также установил пакет под названием «Ограниченные дополнения Ubuntu», который немного улучшил шрифты в OpenJDK, но Sun JRE отображает их намного лучше.

    mooware01 сентября 2009, 14:11
1

Вы можете использовать openJDK и шрифты Sun / Oracle!

Сначала установите openDJK (пакеты среды выполнения и разработки)

Затем установите только среду выполнения Sun / Oracle. Это установит шрифты, но вы по-прежнему будете использовать java openJDK для запуска всего.

1

There are 8 standard font families you do not need to embed as the PDF viewer should provide. Otherwise they will be substituted. What does the PDF look like in the other PDF Java Open Source viewers (Multivalent, JPedal)?

  • I’m using JPedal in my project and also tested it with the IcePDF Webstart Demo and the Swinglabs PDFRenderer. They had the same issues. The problem was OpenJDK. I installed Sun JRE and everything worked fine.

    mooware02 сентября 2009, 07:45
1

Установите последнюю версию OpenJDK. Или перекомпилируйте Freetype с включенной подсказкой. Срок действия патентов Apple на хинтинг истек.

1

Вы можете попробовать использовать pdffonts , чтобы помочь вам проанализировать проблема - он, по крайней мере, сообщит вам имена шрифтов, используемых в файле PDF, их тип, если они встроены и т. д. Если шрифты не встроены, вы можете попробовать установить их на машине Linux.

1

Возможно, хинтинг шрифтов не работает. Проверьте настройки хинтинга шрифтов в ОС Linux, с которой вы работаете.

Также может быть шрифт - попробуйте указать другой. Тот, который вы используете, может просто плохо отображаться в Linux - некоторые просто так. Я считаю Палатино особенно плохим.

  • I don’t think I could change the font easily, since it’s defined in the PDF document, but the font hinting sounds like a good idea.

    mooware01 сентября 2009, 06:00
3

У меня установлен OpenJDK в Linux, и все приложения были с очень, очень плохими шрифтами ... после многих попыток изменить шрифты, антиалиас, установить шрифты 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 устранило проблему.

0

Я не тестировал это, но в соответствии с этим сообщением на форуме по индуктивной автоматизации .com вы можете исправить это установив шрифты:

 sudo apt-get install msttcorefonts
 

и изменение lucidasans на arial в свойствах шрифтов Java:

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

Are the fonts embedded in the PDF?

  • I think the garbled fonts are not embedded. AFAIK the PDF standard defines a few standard fonts which will not be embedded.

    mooware01 сентября 2009, 13:48
  • Embedded fonts have alsorts of potential issues with Java such as encoding and patent issues. It is down how the renderer handles these….

    mark stephens04 сентября 2009, 07:49
  • Looks like I was wrong. The garbled fonts can be embedded ones.

    mooware01 сентября 2009, 13:54
0

Try to copy all your windows fonts, and put them into your linux environment.