5

以下に示すように、Javaを使用して印刷するための2つのコードがあります。

最初のコード

for(int i = 0; i < files.length; i++) {
    String file = "C:\\images\\colour\\"+files[i].getName();
    String filename = file;
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
    PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
    PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
    PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, DocFlavor.INPUT_STREAM.GIF, pras);

    if (service != null) {
        DocPrintJob job = service.createPrintJob();

        PrintJobListener listener = new PrintJobAdapter() {
            public void printDataTransferCompleted(PrintJobEvent e) {
                System.exit(0);
            }
        };

        job.addPrintJobListener(listener);
        FileInputStream fis = new FileInputStream(filename);
        DocAttributeSet das = new HashDocAttributeSet();
        Doc doc = new SimpleDoc(fis, flavor, das);
        job.print(doc, pras);

    }
}

このコードにはprintDialogがあり、プリンターで意図したとおりに印刷されます

2番目のコード:

try {
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    pras.add(new Copies(1));

    PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras);

    if (pss.length == 0) 
        throw new RuntimeException("No printer services available.");

    PrintService ps = pss[3];
    System.out.println("Printing to " + ps);
    DocPrintJob job = ps.createPrintJob();

    FileInputStream fin = new FileInputStream(files[i]);
    Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null);
    job.print(doc, pras);

    fin.close();
}
catch (IOException ie) {
    ie.printStackTrace();
}
catch (PrintException pe) {
    pe.printStackTrace();
}

}

私が求めている印刷ダイアログなしで印刷されますが、これは空白のページをプリンターに印刷します。

今はこれらのコードの 1 つだけを使用することを目指しているかもしれませんが、私が試したものを提供しました。コード 1 を機能させる必要がありますが、printerDialog は必要ありません。

コード 1 から printerDialog を削除すると、基本的にコード 2 と同じようになります (このプリンターでは空白で印刷されます)。

問題は、コード1で渡されたパラメーターが渡されPrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, DocFlavor.INPUT_STREAM.GIF, pras);なくなったことにあると思います

とにかく PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, DocFlavor.INPUT_STREAM.GIF, pras); からパラメーターを渡す方法はありますか? ダイアログを使用せずにプリンターに入力するか、ユーザーが [はい] をクリックしたかのようにダイアログをスキップする方法はありますか?

最初に非常に長い投稿をお詫びします。誰かが助けてくれることを願っています。前もって感謝します

4

1 に答える 1

0

ファイルを印刷するだけの場合は、java.awt.Desktop.printを使用するなど、はるかに簡単な方法があります。

フォーマットを改善するために、以下で説明したバッチファイルを実行するコードを次に示します

Process p;
    String execBatchPath = "your file path";

    try {
        p = Runtime.getRuntime().exec("cmd /c start " + execBatchPath);
        p.waitFor();
    } catch (IOException e) {
        FileIO.writeLog("IO exception while trying to run the batch");
        ErrorUtils.manageCatch(e);
    } catch (InterruptedException e) {
        FileIO.writeLog("Batch process was interrupted");
        ErrorUtils.manageCatch(e);
    }
于 2013-07-18T13:38:29.837 に答える