我尝试使用本地打印机打印PDF文件。问题是当我在打印机对话框中选择打印机并按下打印按钮时没有任何反应,对话框就会关闭。我没有得到任何例外或警告,打印机只是不打印PDF文件。我不知道为什么会这样。我已经使用三台不同的计算机(Windows 7& 10)和三台不同的打印机对它进行了测试,但总是遇到同样的问题。
我也尝试过像这样的PDFBox库:
try{
FileInputStream fis = new FileInputStream("C:/Users/Self/Desktop/test.pdf");
PDDocument doc = new PDDocument();
doc.load(fis);
doc.print();
}catch(FileNotFoundException ex1){
ex1.printStackTrace();
}catch(IOException ex2){
ex2.printStackTrace();
}catch(PrinterException ex3){
ex3.printStackTrace();
}
并使用标准的java方式:
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(1));
PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, aset);
if(ps.length == 0){
throw new IllegalStateException("No Printer found");
}
PrintService myService = null;
for (PrintService printService : ps) {
if (printService.getName().equals("HP17DC1C (HP Officejet Pro 8610)")) {
myService = printService;
break;
}
}
if (myService == null) {
throw new IllegalStateException("Printer not found");
}
try{
FileInputStream fis = new FileInputStream("C:/Users/Slef/Desktop/test.pdf");
Doc pdfDoc = new SimpleDoc(fis, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
DocPrintJob printJob = myService.createPrintJob();
printJob.print(pdfDoc, aset);
fis.close();
}catch(FileNotFoundException ex1){
ex1.printStackTrace();
}catch(PrintException ex2){
ex2.printStackTrace();
}catch(IOException ex3){
ex3.printStackTrace();
}
但两种方式都会导致同样的问题。打印对话框后没有任何反应。我使用的是java版本8.66。任何人都可以帮我解决这个问题,我真的需要打印PDF文件吗?