java连接打印机并进行打印
生活随笔
收集整理的這篇文章主要介紹了
java连接打印机并进行打印
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
連接同網段的打印機
1.先查詢本網段的在線打印機名稱
public JsonResult<List<String>> getPrinterList() {List<String> list = new ArrayList<>();HashPrintRequestAttributeSet requestAttributeSet = new HashPrintRequestAttributeSet();DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;//查找所有的可用的打印服務PrintService[] printService = PrintServiceLookup.lookupPrintServices(flavor, requestAttributeSet);if (printService == null || printService.length == 0) {log.info("打印獲取失敗,未找到可用打印機,請檢查。");}if (printService != null) {for (PrintService print : printService) {list.add(print.getName());}}return JsonResult.ok(list);}因為打印的時候只需要打印機名稱就行了,所以這里只獲取了打印機名稱。
2.再通過打印機名稱來進行打印操作
方法入參為打印機名稱和文件。
public Boolean printFile(String printerName, MultipartFile multipartFile) {}匹配打印機名稱
if (printerName != null) {// 查找并設置打印機//獲得本臺電腦連接的所有打印機PrintService[] printServices = PrinterJob.lookupPrintServices();if(printServices == null || printServices.length == 0) {System.out.print("打印失敗,未找到可用打印機,請檢查。");return false;}PrintService printService = null;//匹配指定打印機for (int i = 0;i < printServices.length; i++) {System.out.println(printServices[i].getName());if (printServices[i].getName().contains(printerName)) {printService = printServices[i];break;}}if(printService!=null){printJob.setPrintService(printService);}else{System.out.print("打印失敗,未找到名稱為" + printerName + "的打印機,請檢查。");return false;}}設置紙張大小、方向、頁數等信息
//設置紙張及縮放PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);//設置多頁打印Book book = new Book();PageFormat pageFormat = new PageFormat();//設置打印方向pageFormat.setOrientation(PageFormat.PORTRAIT);//縱向pageFormat.setPaper(getPaper());//設置紙張book.append(pdfPrintable, pageFormat, document.getNumberOfPages());printJob.setPageable(book);printJob.setCopies(1);//設置打印份數//添加打印屬性HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet();pars.add(Sides.DUPLEX); //設置單雙頁最后進行打印
printJob.print(pars);注意這里需要捕獲異常
完整打印代碼如下:
public Boolean printFile(String printerName, MultipartFile multipartFile) {PDDocument document = null;try {File file = new File(multipartFile.getOriginalFilename());FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);document = PDDocument.load(file);PrinterJob printJob = PrinterJob.getPrinterJob();printJob.setJobName(file.getName());if (printerName != null) {// 查找并設置打印機//獲得本臺電腦連接的所有打印機PrintService[] printServices = PrinterJob.lookupPrintServices();if(printServices == null || printServices.length == 0) {System.out.print("打印失敗,未找到可用打印機,請檢查。");return false;}PrintService printService = null;//匹配指定打印機for (int i = 0;i < printServices.length; i++) {System.out.println(printServices[i].getName());if (printServices[i].getName().contains(printerName)) {printService = printServices[i];break;}}if(printService!=null){printJob.setPrintService(printService);}else{System.out.print("打印失敗,未找到名稱為" + printerName + "的打印機,請檢查。");return false;}}//設置紙張及縮放PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);//設置多頁打印Book book = new Book();PageFormat pageFormat = new PageFormat();//設置打印方向pageFormat.setOrientation(PageFormat.PORTRAIT);//縱向pageFormat.setPaper(getPaper());//設置紙張book.append(pdfPrintable, pageFormat, document.getNumberOfPages());printJob.setPageable(book);printJob.setCopies(1);//設置打印份數//添加打印屬性HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet();pars.add(Sides.DUPLEX); //設置單雙頁printJob.print(pars);} catch (PrinterException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (document != null) {try {document.close();} catch (IOException e) {e.printStackTrace();} }}return true;}以上方法自己用于本地啟動后連接本地打印機打印,如果服務發布到服務器上,那么打印機和服務所處的網段不一致,就搜索不到打印機,導致無法打印。
解決以上問題可以代碼通過socket連接指定ip,在指定ip搜索打印機。
總結
以上是生活随笔為你收集整理的java连接打印机并进行打印的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学生会部门职位竞选PPT模板
- 下一篇: xz