0

RedMon を使用してプリンターの .PS ファイルを Java コードにリダイレクトしようとしています。

RedMon ポート構成:

プログラムにリダイレクト: C:\Program Files\Java\jre1.8.0_111\bin\java.exe

引数: -jar c:\dist\JavaApplication5.jar --stdin

および Java コード:

public class JavaAplication5 {

public static void main(String[] args) throws FileNotFoundException {
    BasicConfigurator.configure();                          //log4j
    System.setProperty("jna.library.path", "C:\\dist\\");   //fix path to gsdll

     FileInputStream file = new FileInputStream(args[0]);
     Ghostscript gs = Ghostscript.getInstance(); 
     String[] gsArgs = new String[10];
    gsArgs[0] = "-ps2pdf";
    gsArgs[1] = "-dNOPAUSE";
    gsArgs[2] = "-dBATCH";
    gsArgs[3] = "-dSAFER";
    gsArgs[4] = "-sDEVICE=pdfwrite";
    gsArgs[5] = "-sOutputFile=output.pdf";
    gsArgs[6] = "-c";
    gsArgs[7] = ".setpdfwrite";
    gsArgs[8] = "-f";
    gsArgs[9] =  String.format(" %s ", file) ;        

    try { 
        gs.initialize(gsArgs);
        gs.exit(); 
    } catch (GhostscriptException e) {
        JOptionPane.showMessageDialog(null, "ERROR: " + e.getMessage());
    }
}
}

どうすればこれを機能させることができますか?

4

1 に答える 1

0

したがって、これを正しく読めば、ポートに送信されたデータを Java アプリケーションに送信するように RedMon を設定したことになります。

次に、Ghostscript を (ps2pdf スクリプトを使用して) システム コールし、stdin から読み取るように指示します。

しかし、Ghostscript の stdin は、Java のいくつかの側面を誤解していない限り、Java プログラムの stdin ではありません。

Ghostscript インスタンスをフォークすると、そのアプリケーションが独自の stdin を取得することが予想されます。これは、Java プログラムに関連付けられた stdin とは異なります。

あなたの最善の策は、Java プログラムへの入力をファイルに書き込み、それが完了したら、そのファイルに対して Ghostscript を実行することです。

于 2016-10-27T19:32:47.883 に答える