要实现监听所有连接到本机的打印机并将文件保存为 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 文件。

Java 监听打印机并保存文件为 PDF

原文地址: https://www.cveoy.top/t/topic/pu9w 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录