【问题标题】:Ghost4j not using default ghostscript installationGhost4j 不使用默认的 ghostscript 安装
【发布时间】:2018-04-07 09:50:43
【问题描述】:

我正在使用 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.

根据this thread,这可能是由于 Ubuntu Ghostscript 软件包遗漏了某些字体。所以我从源代码编译了最新的Ghostscript(9.22)并安装了它,现在是我使用gs命令时出现的版本,但Ghost4j似乎仍在使用旧的9.18版本。

如何让它使用新版本的 Ghostscript?

【问题讨论】:

    标签: java ghostscript ghost4j


    【解决方案1】:

    Ghost4j 本身并不使用 ghostscript 安装,而是 ghost4j 和 ghostscript 都使用名为 libgs.so 的库。这个库是 ghostscript 的依赖,但也附带了一个名为 libgs-dev(在 Linux 上)的安装。 我怀疑 Ghost4j 以某种方式使用了该库的一些左版本。 因此,如果您使用的是最新版本的 Ubuntu,安装 libgs-dev 应该可以解决问题,但是当前所有稳定版本的 Linux 都默认为 9.18 我们通过手动构建该库并将我们需要的版本符号链接到 libgs.so 文件解决了这个问题。可以下载编译好的动态链接9.22版本的libgs.sohere(personal dropbox link)保存在/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
    

    而且,如果一个人不信任互联网上的陌生人,那么这里是您自己构建它的说明: (tutorial for building gs), (gs source code)。 为了确保其他一切都相同,我们使用 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();
    }
    

    祝你好运。

    【讨论】:

    • 那行得通 - 谢谢。一些注释供参考:我使用make so 编译它并从sobin 文件夹中获取.so 文件。另外,在我的服务器上,链接是/usr/lib/libgs.so.9,所以我将它链接到新文件(在我的桌面上,它与你的位置相同)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2022-11-29
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2020-01-02
    相关资源
    最近更新 更多