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

如何在javafx的PrinterJob中设置目标打印机,java,javafx,printing,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

我有一个情况,需要打印现金柜台和包装区(仓库)的订单清单

从技术上讲,如何通过说出打印机名称来打印
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());
    }

}

不带参数的方法“createPrinterJob”为默认打印机创建打印机作业。您可以使用“createPrinterJob(Printer-Printer)”方法的其他版本为指定的打印机创建打印机作业。 首先获取打印机实例,如下所示:

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

PrinterJob job=PrinterJob.createPrinterJob(myPrinter);
此行不起作用给出错误类型PrinterJob的方法createPrinterJob(Printer)未定义答案太迟,但任何人都需要相同问题的答案: 您可以使用此类打印文件(而不是节点)

publicstaticvoid打印(stringimagename,PagesManager PagesManager){
打印机打印机=打印机。getDefaultPrinter();
页面布局页面布局
=打印机.createPageLayout(纸张.A4,页面方向.纵向,打印机.MarginType.硬件\u最小值);
PrinterAttributes attr=printer.getPrinterAttributes();
PrinterJob作业=PrinterJob.createPrinterJob();
if(job.showPrintDialog(pagesManager.getScene().getWindow())){
字符串selectedPrinter=job.getPrinter().getName();
PrintRequestAttributeSet pras=新的HashPrintRequestAttributeSet();
审慎监管局增加(新副本(1));
PrintService pss[]=PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT\u STREAM.GIF,pras);
如果(pss.length==0){
抛出新的RuntimeException(“没有可用的打印机服务”);
}
int i=0;
对于(i=0;i
该方法似乎存在。可能您没有正确导入该类。如果您有任何疑问,请添加评论。你的文章不是这个问题的答案。
PrinterJob job = PrinterJob.createPrinterJob(myPrinter);
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);
        }
    }
}