當(dāng)前位置:
首頁(yè) >
java连接打印机并进行打印
發(fā)布時(shí)間:2023/12/20
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
java连接打印机并进行打印
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
連接同網(wǎng)段的打印機(jī)
1.先查詢本網(wǎng)段的在線打印機(jī)名稱
public JsonResult<List<String>> getPrinterList() {List<String> list = new ArrayList<>();HashPrintRequestAttributeSet requestAttributeSet = new HashPrintRequestAttributeSet();DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;//查找所有的可用的打印服務(wù)PrintService[] printService = PrintServiceLookup.lookupPrintServices(flavor, requestAttributeSet);if (printService == null || printService.length == 0) {log.info("打印獲取失敗,未找到可用打印機(jī),請(qǐng)檢查。");}if (printService != null) {for (PrintService print : printService) {list.add(print.getName());}}return JsonResult.ok(list);}因?yàn)榇蛴〉臅r(shí)候只需要打印機(jī)名稱就行了,所以這里只獲取了打印機(jī)名稱。
2.再通過打印機(jī)名稱來(lái)進(jìn)行打印操作
方法入?yún)榇蛴C(jī)名稱和文件。
public Boolean printFile(String printerName, MultipartFile multipartFile) {}匹配打印機(jī)名稱
if (printerName != null) {// 查找并設(shè)置打印機(jī)//獲得本臺(tái)電腦連接的所有打印機(jī)PrintService[] printServices = PrinterJob.lookupPrintServices();if(printServices == null || printServices.length == 0) {System.out.print("打印失敗,未找到可用打印機(jī),請(qǐng)檢查。");return false;}PrintService printService = null;//匹配指定打印機(jī)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 + "的打印機(jī),請(qǐng)檢查。");return false;}}設(shè)置紙張大小、方向、頁(yè)數(shù)等信息
//設(shè)置紙張及縮放PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);//設(shè)置多頁(yè)打印Book book = new Book();PageFormat pageFormat = new PageFormat();//設(shè)置打印方向pageFormat.setOrientation(PageFormat.PORTRAIT);//縱向pageFormat.setPaper(getPaper());//設(shè)置紙張book.append(pdfPrintable, pageFormat, document.getNumberOfPages());printJob.setPageable(book);printJob.setCopies(1);//設(shè)置打印份數(shù)//添加打印屬性HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet();pars.add(Sides.DUPLEX); //設(shè)置單雙頁(yè)最后進(jìn)行打印
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) {// 查找并設(shè)置打印機(jī)//獲得本臺(tái)電腦連接的所有打印機(jī)PrintService[] printServices = PrinterJob.lookupPrintServices();if(printServices == null || printServices.length == 0) {System.out.print("打印失敗,未找到可用打印機(jī),請(qǐng)檢查。");return false;}PrintService printService = null;//匹配指定打印機(jī)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 + "的打印機(jī),請(qǐng)檢查。");return false;}}//設(shè)置紙張及縮放PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);//設(shè)置多頁(yè)打印Book book = new Book();PageFormat pageFormat = new PageFormat();//設(shè)置打印方向pageFormat.setOrientation(PageFormat.PORTRAIT);//縱向pageFormat.setPaper(getPaper());//設(shè)置紙張book.append(pdfPrintable, pageFormat, document.getNumberOfPages());printJob.setPageable(book);printJob.setCopies(1);//設(shè)置打印份數(shù)//添加打印屬性HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet();pars.add(Sides.DUPLEX); //設(shè)置單雙頁(yè)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;}以上方法自己用于本地啟動(dòng)后連接本地打印機(jī)打印,如果服務(wù)發(fā)布到服務(wù)器上,那么打印機(jī)和服務(wù)所處的網(wǎng)段不一致,就搜索不到打印機(jī),導(dǎo)致無(wú)法打印。
解決以上問題可以代碼通過socket連接指定ip,在指定ip搜索打印機(jī)。
總結(jié)
以上是生活随笔為你收集整理的java连接打印机并进行打印的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学生会部门职位竞选PPT模板
- 下一篇: xz