我想要打印pdf,但我尝试过的所有解决方案都无法正常工作。
我想用弹出窗口打印pdf,您可以选择打印机。
当我尝试其他人的解决方案时,这通常是通过静音打印。
我试试这个:
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();
patts.add(Sides.DUPLEX);
PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);
if (ps.length == 0) {
throw new IllegalStateException("No Printer found");
}
System.out.println("Available printers: " + Arrays.asList(ps));
PrintService myService = null;
for (PrintService printService : ps) {
if (printService.getName().equals("HP Deskjet 3070 B611 series")) {
myService = printService;
break;
}
}
FileInputStream fis = new FileInputStream(path_doss);
Doc pdfDoc = new SimpleDoc(fis, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
DocPrintJob printJob = myService.createPrintJob();
printJob.print(pdfDoc, new HashPrintRequestAttributeSet());
fis.close();
这个
FileInputStream fis = new FileInputStream(path_doss);
Doc pdfDoc = new SimpleDoc(fis, null, null);
DocPrintJob printJob = printService.createPrintJob();
printJob.print(pdfDoc, new HashPrintRequestAttributeSet());
fis.close();
提前致谢!
答案 0 :(得分:0)
您可以使用Scanner与用户进行互动。
System.out.print("Please select one of the printers numbers: 1. Printer1, 2.Printer2 etc");
Scanner scanner = new Scanner(System.in);
String sentence = scanner.nextLine();
然后使用该输入从您的列表中选择打印机并打印。
答案 1 :(得分:0)
使用ServiceUI显示打印选择对话框。
如果您有一个现有窗口(例如JFrame),则应使用它来确定前三个参数。第四个和第五个参数来自PrintServiceLookup调用。
因此,典型的调用可能如下所示:
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
if (defaultService == null) {
defaultService = ps[0];
for (PrintService printService : ps) {
if (printService.getName().equals("HP Deskjet 3070 B611 series")) {
defaultService = printService;
break;
}
}
}
PrintService myService = ServiceUI.printDialog(
mainWindow.getGraphicsConfiguration(),
mainWindow.getX() + 40,
mainWindow.getY() + 40,
ps, defaultService, flavor, patts);
if (myService == null) {
System.out.println("User canceled print operation.");
return;
}
如果您没有应用程序窗口,则可以为第一个参数传递null。没有(简单)方法知道打印对话框的大小,因此对于第二个和第三个参数,您必须猜测。例如:
Point center = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
PrintService myService = ServiceUI.printDialog(
null, center.x - 200, center.y - 200,
ps, defaultService, flavor, patts);
答案 2 :(得分:-1)
您是否尝试过此操作,这将打开您要打印的文件,然后您可以选择打印机进行打印。
Desktop.getDesktop().open(new File("c:/test.pdf"));