Java 监听打印机并保存文件为 PDF
要实现监听所有连接到本机的打印机并将文件保存为 PDF 文件,可以使用 Java 的 javax.print 包和 Apache PDFBox 库。
首先,需要使用 javax.print 包获取到所有连接到本机的打印机。可以使用以下代码:
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
public class PrinterListener {
public static void main(String[] args) {
// 获取所有打印机
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
// 遍历打印机并输出名称
for (PrintService printService : printServices) {
System.out.println(printService.getName());
}
}
}
接下来,需要使用 Apache PDFBox 库将打印文件保存为 PDF 文件。可以使用以下代码:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.PageRanges;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.IOException;
public class PrinterListener {
public static void main(String[] args) {
// 获取所有打印机
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
// 遍历打印机并输出名称
for (PrintService printService : printServices) {
System.out.println(printService.getName());
// 监听打印机
PrintServiceAttributeSet printServiceAttributeSet = printService.getAttributes();
if (printServiceAttributeSet.get(PrinterIsAcceptingJobs.class) == PrinterIsAcceptingJobs.ACCEPTING_JOBS) {
// 打印文件
printFile(printService, 'path/to/file.txt');
}
}
}
private static void printFile(PrintService printService, String filePath) {
try {
// 创建打印任务
DocPrintJob printJob = printService.createPrintJob();
// 设置打印请求属性
PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();
attributeSet.add(new Copies(1));
// 读取文件
File file = new File(filePath);
Doc doc = new SimpleDoc(file.toURI().toURL(), DocFlavor.URL.AUTOSENSE, null);
// 打印文件
printJob.print(doc, attributeSet);
// 将打印文件保存为PDF
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintService(printService);
PDDocument document = PDDocument.load(file);
job.setPageable(new PDFPageable(document));
job.print();
document.save('path/to/file.pdf');
document.close();
} catch (PrintException | IOException | PrinterException e) {
e.printStackTrace();
}
}
}
注意,在上面的代码中,需要将'path/to/file.txt'替换为实际的打印文件路径,并将'path/to/file.pdf'替换为保存的 PDF 文件路径。
这样,就可以持续监听所有连接到本机的打印机,并将打印文件保存为 PDF 文件。
原文地址: https://www.cveoy.top/t/topic/pu9w 著作权归作者所有。请勿转载和采集!