2

这是我用于打印 pdf 文件并在执行打印时获取它的事件的代码。我的问题是它总是进入printJobNoMoreEvents而不是进入printJobCompleted. 可能是什么问题?我该如何解决这个问题?是否可以从printJobNoMoreEvents活动中检查工作是否已完成?

这是我的代码:

import com.qoppa.pdfPrint.PDFPrint;
import java.awt.print.PrinterJob;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.SimpleDoc;
import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;

public class PdfPrint implements PrintJobListener{

public static void main(String[] args) {
    try 
    {           
        // Create a printer job and get its PrintService
        PrinterJob pJob = PrinterJob.getPrinterJob();
        PrintService ps = pJob.getPrintService();

        // Load the PDF document and create SimpleDoc from it
        PDFPrint pdfPrint = new PDFPrint("C:\\temp\\file printing 1.pdf", null);
        SimpleDoc printDoc = new SimpleDoc(pdfPrint, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);

        // Get a doc print job from the service and set the listener and Printable 
        DocPrintJob docPrint = ps.createPrintJob();
        docPrint.addPrintJobListener(new PdfPrint());
        docPrint.print(printDoc, null);            

    }
    catch (Exception ex) 
    {
        Logger.getLogger(PdfPrint.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
public void printDataTransferCompleted(PrintJobEvent pje) {
    System.out.println("printDataTransferCompleted");
}

@Override
public void printJobCompleted(PrintJobEvent pje) {
    System.out.println("printJobCompleted");
}

@Override
public void printJobFailed(PrintJobEvent pje) {
    System.out.println("printJobFailed");
}

@Override
public void printJobCanceled(PrintJobEvent pje) {
    System.out.println("printJobCanceled");
}

@Override
public void printJobNoMoreEvents(PrintJobEvent pje) {
    System.out.println("printJobNoMoreEvents");
}

@Override
public void printJobRequiresAttention(PrintJobEvent pje) {
    System.out.println("printJobRequiresAttention");
}

}

Thakn 提前了。

4

2 回答 2

0

1)设置打印机服务改变这个

PrintService ps = pJob.getPrintService();
PrinterJob pJob = PrinterJob.getPrinterJob();

对此

PrintService ps = PrintServiceLookup.lookupDefaultPrintService();

当我从 PrintJob 类尝试 .getPrintService() 时,它只有 printDataTransferCompleted 和 printJobNoMoreEvents,它没有将 pdf 打印到打印机。

方法事件监听器说明:

printDataTransferCompleted() 数据已成功从客户端传输到打印服务。

printJobNoMoreEvents() 此打印作业将不再调用此接口中的任何方法。

printJobCompleted() 作业已完成。

然后我尝试 PrintServiceLookup.lookupDefaultPrintService() 来获取默认打印机,它将使用 printJobCompleted 打印 pdf。

2) 要加载 PDF 文档,可以使用这个

 String filename = "C:\\temp\\file printing 1.pdf";
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    FileInputStream fis = null;
    fis = new FileInputStream(filename);
    Doc printDoc = new SimpleDoc(fis, flavor, null);

不需要使用qoppa

于 2019-01-25T08:40:26.257 回答
-1

代码是标准 JPS,除了 qoppa 调用是他们的自定义组件。你问过qoppa吗?

于 2012-05-13T08:50:10.057 回答