【问题标题】:java PDFPrint and PrintJobListener Always Returns printJobNoMoreEventsjava PDFPrint 和 PrintJobListener 总是返回 printJobNoMoreEvents
【发布时间】:2012-05-13 08:35:47
【问题描述】:

这是我打印 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 提前了。

【问题讨论】:

    标签: java pdf printing


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 不,我没有,因为这不是问题所在。即使我不使用 qoppa 也会发生同样的情况。有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2017-04-26
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多