Ghost4j не использует стандартную установку ghostscript
Я использую Ghost4j для рендеринга PDF-файлов, но иногда выдает следующие виды ошибок при попытке рендеринга документов, созданных в MS Word
[main] ERROR org.ghost4j.Ghostscript - GPL Ghostscript 9.18: Some glyphs of the font TimesNewRoman requires a patented True Type interpreter.
Согласно этой ветке это может быть связано с тем, что пакет Ubuntu Ghostscript пропускает определенные шрифты. Поэтому я скомпилировал последнюю версию Ghostscript (9.22) из исходного кода и установил ее, и теперь это версия, которая появляется, когда я использую gs
команда, но Ghost4j по-прежнему использует старую версию 9.18.
Как я могу сказать ему использовать новую версию Ghostscript?
1 ответ
Ghost4j не использует установку ghostscript как таковую, вместо этого и ghost4j, и ghostscript используют библиотеку с именем libgs.so. Эта библиотека является зависимой от ghostscript, но также поставляется с установкой, называемой libgs-dev (в Linux). Я подозреваю, что каким-то образом Ghost4j использует какую-то левую версию библиотеки. Поэтому, если вы используете последнюю версию Ubuntu, установка libgs-dev должна решить проблему, однако все текущие стабильные версии Linux по умолчанию соответствуют версии 9.18. Мы решили эту проблему, вручную собрав эту библиотеку и вставив ссылку на нужную нам версию в libgs.so. файл. Вы можете скачать скомпилированную динамически связанную версию 9.22 из libgs.so здесь (личная ссылка на Dropbox), сохранить ее в /usr/lib/x86_64-linux-gnu/libgs.so.9.22 и запустить
ln -fs /usr/lib/x86_64-linux-gnu/libgs.so.9.22
/usr/lib/x86_64-linux-gnu/libgs.so
и, если вы не доверяете незнакомцам в Интернете, как это не следует делать, здесь приведены инструкции по его самостоятельному созданию: (учебник по сборке gs), (исходный код gs). Чтобы убедиться, что все остальное одинаково, мы используем Ghost4j 1.0.1 и JNA 4.1.0
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.ghost4j</groupId>
<artifactId>ghost4j</artifactId>
<version>1.0.1</version>
</dependency>
Решая эту проблему, я нашел этот метод конечной точки очень полезным:
@RequestMapping(value = "/gs/version", method = GET)
public GhostscriptRevision gsVersion() throws IOException {
return Ghostscript.getRevision();
}
Удачи.