日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。