我怎么能打印pdf

时间:2016-02-01 16:57:38

标签: java

我想要打印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();

提前致谢!

3 个答案:

答案 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"));