java及vue实现获取电脑打印机及打印功能
java及vue实现获取电脑打印机及打印功能
·
java实现打印的功能
一、java后台获取打印机
- 首先需要引入依赖
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.25</version>
</dependency>
实现打印的核心关键是awt中的PrinterJob.lookupPrintServices()方法。
当时的需求是用打印机打印pdf文件,所有在方法中传入了三个参数(name 打印机的名字,path pdf文件的路径,pages 打印的页数)
下面是将方法封装成为一个工具类,方便在使用时直接调用。
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;
import org.apache.pdfbox.printing.PDFPrintable;
import org.apache.pdfbox.printing.Scaling;
import javax.print.PrintService;
import java.awt.print.*;
import java.io.File;
import java.io.IOException;
public class PrintUtil {
public static void Print(String name ,String path,Integer pages) throws IOException, PrinterException {
// 使用打印机的名称
// String printName = "HP LaserJet Pro M201-M202 PCL 6";
String printName = name;
String pdfPath = path;
File file = new File(pdfPath);
// 读取pdf文件
PDDocument document = PDDocument.load(file);
// 创建打印任务
PrinterJob job = PrinterJob.getPrinterJob();
// 遍历所有打印机的名称
for (PrintService ps : PrinterJob.lookupPrintServices()) {
String psName = ps.toString();
// 选用指定打印机
if (psName.equals(printName)) {
//isChoose = true;
job.setPrintService(ps);
break;
}
}
job.setPageable(new PDFPageable(document));
Paper paper = new Paper();
// 设置打印纸张大小
paper.setSize(598, 842); // 1/72 inch
// 设置打印位置 坐标
paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight()); // no margins
// custom page format
PageFormat pageFormat = new PageFormat();
pageFormat.setPaper(paper);
// override the page format
Book book = new Book();
// append all pages 设置一些属性 是否缩放 打印张数等
book.append(new PDFPrintable(document, Scaling.ACTUAL_SIZE), pageFormat, pages);
job.setPageable(book);
// 开始打印
job.print();
}
}
二、在前端实现打印机的获取,并以下拉框的形式显示
效果如下图:
PrintServiceLookup.lookupPrintServices()也同样可以获取到打印机。这里实现的是获取电脑上的打印机,并将其显示在前端的页面。
首先是后台的实现
- controller的实现
//获取打印机
@GetMapping("/getPrint")
public AjaxResult getPrint(){
return AjaxResult.success(dataLabelService.getPrint());
}
- service层的方法
List<String> getPrint();
- impl的方法
public List<String> getPrint() {
List<String> listPrints = new ArrayList<>();
//构建打印请求属性集
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
//设置打印格式,autosense 自动类型
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
for (PrintService ps : PrintServiceLookup.lookupPrintServices(flavor,pras)) {
String psName = ps.toString();
listPrints.add(psName);
}
return listPrints;
}
vue前端的实现
可以看到后台的接口返回的是一个list的结果,因此在前端同样要用list来接收。
//定义参数,获取本地打印机
printNameList:[],
//得到打印机的名字
getPrint() {
getPrint().then((response) => {
//console.log(response);
this.printNameList = response.data;
});
},
上面的实现适合在本地开发时,获取打印机并打印。当将项目部署在服务器时,如果服务器上没有安装打印机,会发现获取不到打印机。
因此可以通过前端来直接获取打印机。见另一篇文章。
vue结合Lodop前端实现打印机的获取及打印
https://editor.csdn.net/md?not_checkout=1&articleId=122932554
更多推荐
已为社区贡献2条内容
所有评论(0)