Ghost4J/Ghostscript - 尝试将字体嵌入 PDF 时出现错误 100

Posted

技术标签:

【中文标题】Ghost4J/Ghostscript - 尝试将字体嵌入 PDF 时出现错误 100【英文标题】:Ghost4J/Ghostscript - Getting error 100 when trying to embed fonts into PDF 【发布时间】:2012-04-23 16:30:06 【问题描述】:

我有带有引用字体的 PDF,我想使用 Ghost4J 输出包含嵌入字体的 PDF。

public void execute() 
    Ghostscript gs = Ghostscript.getInstance();
    String[] cmdStr=
        "-dNOPAUSE","-dBATCH","-dCompatibilityLevel=1.4",
        "-dPDFSETTINGS=/prepress","-dSAFER","-dNOPLATFONTS",
        "-sDEVICE=display","-sPAPERSIZE=letter",
        "-I","C:\\WINNT\\Fonts\\;C:\\Program Files\\gs\\gs9.05\\lib\\;C:\\Program Files\\gs\\gs9.05\\bin\\;",
        "-dSubsetFonts=true","-dEmbedAllFonts=true",
        "-sFONTPATH=C:\\WINNT\\Fonts", "-sOutputFile=",
        outputPath,"-c",".setpdfwrite", "-f",inputPath
    ;      
    try 

        gs.initialize(cmdStr);
        gs.exit();

     catch (GhostscriptException e)           
        System.out.println("ERROR: " + e.getMessage());
        e.printStackTrace();
    

运行任何 PDF 时都会出现以下错误:

ERROR: Cannot initialize Ghostscript interpreter. Error code is -100   

在命令行上运行时,参数正常工作。

gswin32c.exe -dNOPAUSE -dBATCH -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dSafer -NOPLATFONTS -sDEVICE=pdfwrite -sPAPERSIZE=letter -dSubsetFonts=true -dEmbedAllFonts=true -sFONTPATH=C:\\WINNT\\Fonts -sOutputFile=c:\out.pdf -f c:\test.pdf

跟进:

GhostScript 有权写入 C:。 我删除了除 outputPath、“-f”、inputPath 之外的所有开关,但仍然出现错误 在 inputPath 之后删除了 cmdStr 末尾的逗号

注意事项:

我正在处理回调

【问题讨论】:

我对 Ghost4J 一无所知,但是.... 这些参数 -ps2pdf-psconv 对于 Ghostscript 命令行我来说并不熟悉。另外,在您的代码示例的 cmdStr... Ghost4J 只是 C++ Ghostscript 代码的 Java 包装器。 ghost4j.sourceforge.net 我猜的太多了...但是您确定从 Java 代码调用 Ghostscript 的方式正确吗? 您需要做的第一件事是捕获 Ghostscript 返回的反向通道信息。我不知道你会如何在 Ghost4J 中做到这一点,但你绝对需要它。这可能会告诉您出了什么问题。我的猜测是输出文件,你确定你有权限写入 C: 的根目录吗?如果我对此进行调查,我会首先将参数数量减少到最低限度。前面关于不熟悉的参数的评论是非常正确的,这些不是正常的 GS 参数并且(在 GS 的正常构建中)不会做任何事情。 嗨@eabraham,你得到这个查询的答案了吗?我也有同样的问题。幽灵脚本的新手:) 【参考方案1】:

您的 inputPath 变量后面有一个逗号。这是无效的 Java 语法。

我在生产 Java 应用程序中使用 ghostscript 从 PDF 生成 PCL 文件。我使用 java.lang.Runtime 类来执行 Ghostscript 可执行文件,所以我不能直接为 Ghost4J 提供建议。

我怀疑问题在于 api 不知道支持文件的位置。尝试传递字体、lib 和 bin 位置的完整路径,如下所示。

"-Ic:\Program Files (x86)\gs\fonts\;c:\Program Files (x86)\gs\lib\;c:\Program Files (x86)\gs\bin\;"

【讨论】:

您对逗号的看法是对的,但我仍然收到错误消息。

以上是关于Ghost4J/Ghostscript - 尝试将字体嵌入 PDF 时出现错误 100的主要内容,如果未能解决你的问题,请参考以下文章

尝试将社交媒体链接添加到 Drupal 网站

尝试将列表输出保存到文件

尝试将多个 Uitextfields 添加为整数 [重复]

尝试从 UIViewController 将属性分配给 UIScrollView 类

尝试将指针与结构一起使用时出错

尝试将数据从子活动返回到 MainActivity 时获取 NullPointerException