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

4

我有一些引用字体的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中,我没有看到任何调用gswin32c.exe的内容,该内容只适用于Windows(只有在Unix上才能使用gs)。 - Kurt Pfeifle
Ghost4J只是C++ Ghostscript代码的Java包装器。http://ghost4j.sourceforge.net/ - eabraham
我猜了这么多……但你确定你从Java代码中调用Ghostscript的方式是正确的吗? - Kurt Pfeifle
1
你需要做的第一件事是捕获Ghostscript返回的后端信息。我不知道在Ghost4J中如何实现,但你绝对需要它。这可能会告诉你出了什么问题。我猜测问题出在OutputFile上,你确定你有权限写入C盘根目录吗?如果我在调查这个问题,我会先将参数数量减少到最小。早期关于陌生参数的评论是正确的,这些不是正常的GS参数,在正常的GS构建中将无效。 - KenS
1
嗨@eabraham,你有得到这个问题的答案吗? 我也遇到了同样的问题。对ghost script很新 :) - TusharPanda
显示剩余2条评论
1个回答

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\;"

你说的逗号是对的,但我仍然收到错误信息。 - eabraham

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