gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:00 25 4
gpt4 key购买 nike

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

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

我想做的是将 PDF 文档打印到这些打印机上。我希望程序将文档发送到被请求的打印机。

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

由于它是一个在后台运行的网络服务器,我无法填充打印机对话框并让用户选择打印机。我必须能够设置将以编程方式使用的打印机。

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

请给我关于如何实现它的想法。

最佳答案

通过在网络上进行更多研究,我解决了我的问题。我将它提供给可能需要它的其他人;

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

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。

关于java - 在 Java 中使用不同的打印机打印 .PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15221044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com