Java代码从客户端机器打印PDF文件

标签 java pdf printing struts2

我正在使用 Java(Struts2 框架)在我的应用程序中开发计费模块。成功提交账单表格后,我的代码生成账单的 PDF。我想要实现的是,在成功提交账单表格和成功生成 PDF 后,生成的 PDF 应该从打印机打印。我编写了用于打印 PDF 的代码,但这里的问题是,通过该代码,只能从部署了应用程序并连接了打印机的同一台机器上打印 PDF 文件。但这不会是应用程序完成后的架构。将会有客户端-服务器架构,我的应用程序将部署在一台服务器上,许多客户端将从他们各自的机器上使用该应用程序。

所以这里的问题是,每台其他机器都连接到不同的打印机,并且根据我当前的代码,只能从部署应用程序的位置打印 PDF,即在本例中为服务器。

现在我的问题是:

  1. 是否可以实现PDF打印,在这种情况下,使用 Java,我的意思是,从连接到相应客户端机器的打印机打印 PDF?

  2. 如果是,我该怎么做?

这是我的代码片段:

import java.io.FileInputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.Sides;

public class PDFPrintDemo {

    public static void main(String[] args) {
        try {

            System.out.println("Printing PDF demo using JAVA.");

            DocFlavor docFlavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;

        PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();

        attributeSet.add(Sides.ONE_SIDED);
        attributeSet.add(new Copies(2));

        PrintService[] printServices = PrintServiceLookup
                .lookupPrintServices(docFlavor, attributeSet);

        if (printServices.length == 0) {
            System.out.println("No printer found...");
        }

        PrintService myService = null;

        for (PrintService service : printServices) {
            System.out.println("Connected printer name is :: "
                    + service.getName());
            if (service.getName().equals(
                    "Hewlett-Packard-HP-LaserJet-Pro-MFP-M126nw")) {

                myService = service;

                break;

            }
        }

        FileInputStream inputStream = new FileInputStream(
                "/home/roshan/Downloads/rudhiraBillDemo.pdf");

        Doc pdfDoc = new SimpleDoc(inputStream,
                DocFlavor.INPUT_STREAM.AUTOSENSE, null);

        DocPrintJob printJob = myService.createPrintJob();

        printJob.print(pdfDoc, attributeSet);

        inputStream.close();

        System.out.println("PDF printed successfully..");

    } catch (Exception exception) {
        exception.printStackTrace();
    }
}

}

最佳答案

猜想您的最终项目是一个客户想要下载和打印 PDF 文件的网站。

如果我的猜测是正确的,那么您的答案是否定的!客户端可以下载,但您不能强制打印!

您可以编写一个返回 PDF 文件的 struts action(与上面所做的相同),但是(由于安全问题)您无法开发任何 html+javascript 代码,将生成的 PDF 发送到客户端打印机。如您所知,html+javascript 中还有其他限制,例如您无法访问客户端摄像头或麦克风。

如果您绝对想要这个,您应该使用 Java Applet、Flash Player 或 ActiveX(仅限 Windows)。这些技术可以访问客户机上的任何设备。

关于Java代码从客户端机器打印PDF文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39387924/

相关文章:

java - 用任意数量的逗号和空格拆分字符串

java - 如何读取 Excel 并获取多个值并使用 selenium Web 驱动程序和 testNG 中的数据提供程序连接它们

java - HBase LESS 过滤器不适用于字节

javascript - Window.print() 绕过打印对话框

python - 并排打印不同尺寸的列表

Java的swing print()用法

java - 断言字符串具有一定长度(Java)

java - 资源$NotFoundException。无法从/res/raw 打开 PDF

jquery 菜单在嵌入代码中落后于 pdf 加载

ios - 将存储在iphone中的pdf文件上传到ios中的服务器