java 连接打印机打印PDF文件
需求背景是导出excel并且打印,excel导出设置和转PDF网上有很多资料,本文只记录连接打印机打印PDF的部分。
1: 需要引入maven配置
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.21</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2:java代码 连接打印机实现打印PDF文件功能
public static void main(String[] args) {
try {
//打印的pdf文件
File file = new File("D:/export/告警数据_1678774217351.pdf");
String printerName = "HPAA80D5";//打印机名称
PDDocument document = PDDocument.load(file);
PrinterJob job = findPrintService(printerName);
configPageStyle(document, job);
// 开始打印
job.print();
}catch (Exception e){
log.error("异常", e.getMessage());
}
}
/**
* 根据打印机名称匹配打印机
* @param printerName
* @return
* @throws Exception
*/
public static PrinterJob findPrintService(String printerName) throws Exception{
//获取打印驱动
PrinterJob job = PrinterJob.getPrinterJob();
// 遍历查询本地打印机名称
for (PrintService service : PrinterJob.lookupPrintServices()) {
String psName = service.toString();
// 匹配对应的打印机
if (psName.contains(printerName)) {
job.setPrintService(service);
return job;
}
}
throw new RuntimeException("打印失败,未找到名称为" + printerName + "的打印机。");
}
/**
* 设备打印属性
* @param document
* @param job
*/
public static void configPageStyle(PDDocument document, PrinterJob job) {
//设置纸张的大小和打印区域
Paper paper = new Paper();
paper.setSize(590,840);
paper.setImageableArea(10,10, 590,840);
PageFormat pageFormat = new PageFormat();
pageFormat.setPaper(paper);
//设置页面打印方向
pageFormat.setOrientation(PageFormat.PORTRAIT);
Book book = new Book();
book.append(new PDFPrintable(document, Scaling.ACTUAL_SIZE), pageFormat, 1);
//设置打印类
job.setPageable(book);
}