Ghost4j未使用默认的Ghostscript安装

4

我正在使用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版本。如何让Ghost4j使用新版本的Ghostscript呢?
1个回答

2
Ghost4j并不直接使用ghostscript安装,它们都使用一个名为libgs.so的库。这个库是ghostscript的依赖项,但也随着安装libgs-dev(在Linux上)一起提供。 我怀疑Ghost4j使用了某个旧版本的库。 因此,如果您正在使用最新版本的Ubuntu,则安装libgs-dev应该可以解决问题,但是所有当前稳定版本的Linux默认为9.18版本。 我们通过手动构建该库并将我们需要的版本符号链接到libgs.so文件来解决此问题。您可以从这里(个人dropbox链接)下载编译的动态链接版本9.22的libgs.so,将其保存在/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();
}

祝你好运。


那个有效 - 谢谢。一些参考注释:我使用 make so 进行编译,并从 sobin 文件夹中获取了 .so 文件。此外,在我的服务器上,链接是 /usr/lib/libgs.so.9,所以我将其链接到新文件(在我的桌面上,它与您的位置相同)。 - jamsandwich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接