Java代码从客户端计算机

时间:2016-09-08 09:57:35

标签: java pdf printing struts2

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

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

现在我的问题是:

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

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

  3. 这是我的代码段:

    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();
        }
    }
    
    }
    

1 个答案:

答案 0 :(得分:1)

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

如果我的猜测是真的那么你的回答是否定的!客户可以 /* We wanna use foreign_key always. if (empty($this->primary_key)) { */ if ( ! empty($this->foreign_key)) { // Validate foreign keys for consistency naming convention recognizer $foreign_key = array(); foreach($this->foreign_key as $namespace => $fk) { $foreign_key[strtolower($namespace)] = $fk; } $this->foreign_key = $foreign_key; } else { // If so far we didnt have any keys yet, // then hopefully someone is really follow Gas convention // while he define his entity relationship (yes, YOU!) foreach ($this->meta->get('entities') as $name => $entity) { if ($entity['type'] == 'belongs_to') { $child_name = $entity['child']; $child_instance = new $child_name; $child_table = $child_instance->table; $child_key = $child_instance->primary_key; $this->foreign_key[strtolower($child_name)] = $child_table.'_'.$child_key; } } } //} ,但您不能强制它download

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

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