1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java 调用打印机 打印pdf方案

java 调用打印机 打印pdf方案

时间:2021-06-19 21:42:33

相关推荐

java 调用打印机 打印pdf方案

网上检索到的Java Printing Service方案

类似的方法的确会向打印机发送打印任务,但是打印机无反应不响应打印

//1.得到一个文件的输入流FileInputStream fiStream;try {psStream = new FileInputStream("./sample.PDF");} catch (FileNotFoundException ffne) {}if (psStream == null) {return;}//这是要打印文件的格式,如果是PDF文档要设为自动识别DocFlavor fileFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;//2.得到要打印的文档类DOCDoc myDoc = new SimpleDoc(fiStream, fileFormat, null); //3.生成一个打印属性设置对象PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();aset.add(new Copies(5));//Copies-打印份数5份aset.add(MediaSize.A4);//A4纸张aset.add(Sides.DUPLEX);//双面打印//4.关键一步,得到当前机器上所有已经安装的打印机//传入的参数是文档格式跟打印属性,只有支持这csdn狗肉猫汤个格式与属性的打印机才会被找到PrintService[] services = PrintServiceLookup.lookupPrintServices(fileFormat, aset);if (services.length > 0) {//5.用打印服务生成一个文档打印任务,这里用的是第一个服务//也可以进行筛选,services[i].getName()可以得到打印机名称,可用名称进行比较得到自己想要的打印机DocPrintJob job = services[0].createPrintJob();try {//6.最后一步,执行打印文档任务,传入的参数是Doc文档类,与属性(5份,双面,A4)job.print(myDoc, aset);//成功后电脑会提示已有文档添加到打印队列} catch (PrintException pe) {}}

故此使用 apache pdfbox

PDFBox是一个用以生成PDF的开源项目,相关jar包下载地址。

pdfbox-2.0.9.jar2.5MB, pre-built binaryPGPSHA512fontbox-2.0.9.jar1.6MB, pre-built binaryPGPSHA512preflight-2.0.9.jar245KB, pre-built binaryPGPSHA512xmpbox-2.0.9.jar131KB, pre-built binaryPGPSHA512pdfbox-tools-2.0.9.jar72KB, pre-built binaryPGPSHA512pdfbox-debugger-2.0.9.jar237KB, pre-built binaryPGPSHA512

代码:

import java.awt.print.PrinterJob;import java.io.File;import java.io.IOException;import javax.print.PrintService;import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.printing.Orientation;import org.apache.pdfbox.printing.PDFPageable;public class ServicePrint {public static void print() throws Exception {PDDocument document = null;try {System.out.println("print");String pdfFile = "d:/1.pdf";//文件String printerName = "Canon MF4500";//打印机名包含字串document = PDDocument.load(new File(pdfFile));PrinterJob printJob = PrinterJob.getPrinterJob();printJob.setJobName(new File(pdfFile).getName());if (printerName != null) {PrintService[] printService = PrinterJob.lookupPrintServices();//获得本台电脑连接的所有打印机for (int i = 0;i < printService.length; i++) {System.out.println(printService[i].getName());if (printService[i].getName().contains(printerName)) {System.out.println();System.out.println(printService[i].getName()+"--------------------------------------");System.out.println();printJob.setPrintService(printService[i]);break;}}}printJob.setPageable(new PDFPageable(document, Orientation.AUTO,false, 0));printJob.print();}finally {if (document != null) {try {document.close();} catch (IOException e) {e.printStackTrace();}}}};}

只连接一个打印机时打印机名字字串无论是什么,都会调用该唯一打印机打印.

相关打印属性的定义参考官方文档

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。