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();
}

Удачи.

Другие вопросы по тегам