首页 文章

使用Java中的不同打印机打印.PDF文件

提问于
浏览
5

我正在尝试为企业系统编写集成 .

有一个Web服务器正在被来自两个不同地方的许多客户使用 . 此服务器上安装了两台网络打印机 .

我想要做的是将PDF文档打印到这些打印机 . 我希望程序将文档发送到请求它的打印机 .

我可以确定请求的位置 . 但是我无法在运行时设置默认打印机 .

Since it's a web server that works in background I can't populate a printer dialog and let the user choose the printer. I must be able to set the printer that will be used programmatically.

现在,我能够通过使用 PrinterJob.lookupPrintServices(); 查看系统上已注册的打印机,我可以使用请求的打印机设置服务,但不会更改默认打印机,系统会继续在默认打印机上打印 .

请告诉我你如何实现它的想法 .

1 回答

  • 8

    通过更多的网络研究,我解决了我的问题 . 我在这里为那些可能需要它的人提供它;

    我从这个网站得出了解决方案:

    http://webmoli.com/2008/11/03/java-print-pdf/

    注意:您需要将PdfRenderer .jar库安装到您的项目中以运行网站中给出的代码:最初在PrintPdf.java中的代码不提供我的解决方案但作者在注释部分添加了一个方法来设置不同的打印机在运行时打印 .

    方法是:

    /**
    * Sets the printer service to be used for printing
    *
    * @param argPrintServiceName
    * @throws PrinterException
    */
    public void setPrintService(String argPrintServiceName) throws PrinterException {
    PrintService[] printServices = PrinterJob.lookupPrintServices();
    int i;
    for (i = 0; i < printServices.length; i++) {
    if (printServices[i].getName().equalsIgnoreCase(argPrintServiceName)) {
    printerJob.setPrintService(printServices[i]);
    break;
    }
    }
    if (i == printServices.length) {
    throw new PrinterException(“Invalid print service name: ” + argPrintServiceName);
    }
    }
    

    您需要对此方法进行一些更改 . 由于printerJob不是全局变量,因此不会影响打印 . 为此,请将此方法的返回参数设置为PrintService:

    public static PrintService setPrintService(String argPrintServiceName) throws PrinterException {
            PrintService psr = null;
        PrintService[] printServices = PrinterJob.lookupPrintServices();
        int i;
        for (i = 0; i < printServices.length; i++) {
        if (printServices[i].getName().equalsIgnoreCase(argPrintServiceName)) {
            psr = printServices[i];          
        break;
        }
        }
        if (i == printServices.length) {
        throw new PrinterException("Invalid print service name: " + argPrintServiceName);
        }
        return psr;
        }
    

    在main方法中调用方法如:

    PrintService ps = setPrintService("Printer Name Here");
    

    现在,您需要将此服务发送到其他方法;

    改变这个:

    PrintPdf printPDFFile = new PrintPdf(fis, "Test Print PDF");
    

    PrintPdf printPDFFile = new PrintPdf(fis, "Test Print PDF", ps);
    

    这些是你需要改变的其他方法:

    public PrintPdf(byte[] content, String jobName, PrintService ps) throws  
            IOException, PrinterException 
            {
            initialize(content, jobName, ps);
        } 
    
    
    
     public PrintPdf(InputStream inputStream, String jobName, PrintService ps)
        {
         *
         *
         initialize(pdfContent, jobName, ps);
        }
    

    分配pjob后添加以下代码行: pjob.setPrintService(ps);

    private void initialize(byte[] pdfContent, String jobName, PrintService ps) throws      
     IOException, PrinterException 
     {
      *
      *
            pjob = PrinterJob.getPrinterJob();
            pjob.setPrintService(ps);
      *
      *
      ...
     }
    

    此代码完美无缺,并且能够直接-pdf打印 .

相关问题