使用光栅PTR打印机在java中打印文件

时间:2013-07-18 13:26:32

标签: java printers printdialog pointers

我有两个使用java打印的代码,如下所示:

第一个代码

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并在打印机上按预期打印

第二个代码:

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工作,但没有printerDialog。

如果我从代码1中删除了printerDialog,那么基本上它与代码2相同(在此打印机上打印为空白)。

我相信问题是来自PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, DocFlavor.INPUT_STREAM.GIF, pras);的代码1中传递的参数不再被传递

无论如何从PrintService service = ServiceUI.printDialog传递参数(null,200,200,printService,defaultService,DocFlavor.INPUT_STREAM.GIF,pras);在没有使用对话框的情况下进入打印机,或者是否有一种跳过对话框的方式,就好像用户点击了是?

首先为非常长的帖子道歉。希望任何人都可以提供帮助,或者给我一些建议。提前谢谢

1 个答案:

答案 0 :(得分: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);
    }