如何在javafx中的PrinterJob中设置目标打印机

时间:2017-09-21 05:48:53

标签: java javafx printing

我有需要在现金柜台和包装区(仓库)打印订单的情况。

从技术上讲,如何通过说出打印机名称来打印javafx.print.PrinterJob

1)样本打印

public static void PrintSample() {
    Label lbl = new Label("This is sample \n\n\n\n\n\nprint");
    PrinterJob job = PrinterJob.createPrinterJob();
    if (job != null  ) {

        boolean success = job.printPage(lbl);
        if (success) {
            job.endJob();
        }
    }
}

2)获取打印机列表

public static void GetListOfPrinters() {
    PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
    System.out.println("Number of print services: " + printServices.length);

    for (PrintService printer : printServices) {
        System.out.println("Printer: " + printer.getName());
    }

}

3 个答案:

答案 0 :(得分:2)

答案为时已晚,但任何人都需要针对同一问题的答案: 您可以使用此类来打印文件(不是节点)。...

public static void print(String imageName, PagesManager pagesManager) {
    Printer printer = Printer.getDefaultPrinter();
    PageLayout pageLayout
            = printer.createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.HARDWARE_MINIMUM);
    PrinterAttributes attr = printer.getPrinterAttributes();
    PrinterJob job = PrinterJob.createPrinterJob();
    if (job.showPrintDialog(pagesManager.getScene().getWindow())) {
        String selectedPrinter = job.getPrinter().getName();

        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.");
        }
        int i = 0;
        for (i = 0; i < pss.length; i++) {
            if (pss[i].getName().equals(selectedPrinter)) {
                break;
            }
        }
        PrintService ps = pss[i];
        System.out.println("Printing to " + ps);
        DocPrintJob docPrintJob = ps.createPrintJob();

        FileInputStream fin = null;
        try {
            fin = new FileInputStream(imageName);
        } catch (FileNotFoundException ex) {
            System.out.println(ex);
        }
        Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null);
        try {
            docPrintJob.print(doc, pras);
        } catch (PrintException ex) {
            System.out.println(ex);
        }
        try {
            fin.close();
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }
}

答案 1 :(得分:1)

方法&#39; createPrinterJob&#39; with no-args为默认打印机创建打印机作业。您可以使用该方法的其他版本&#39; createPrinterJob(打印机打印机)&#39;为指定的打印机创建打印机作业。 首先得到如下打印机的实例:

Printer myPrinter;
ObservableSet<Printer> printers = Printer.getAllPrinters();
for(Printer printer : printers){
    if(printer.getName().matches("spefic printer name")){
        myPrinter = printer;
    }
}

现在为&#39; myPrinter&#39;创建一个打印机作业像这样:

PrinterJob job = PrinterJob.createPrinterJob(myPrinter);

答案 2 :(得分:0)

PrinterJob job = PrinterJob.createPrinterJob(myPrinter); 此行无效给出错误方法createPrinterJob(Printer)未定义类型PrinterJob