Java Applet PDF打印

时间:2011-11-24 16:37:50

标签: java pdf applet

我正在尝试构建一个java applet,它打印PDF文件并将其发送到标签打印机而不是默认值。我探索了desktop.print,但无法确定如何指定打印机。

这是我的代码,我试图寻找解决方案,但已经结束了。我签署了applet,它给出的错误只是说应用程序错误0

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.print.*;
import javax.print.*;  
import javax.print.attribute.*;   
import javax.print.attribute.standard.*; 


public class printPDF extends JApplet {

    public void init(){ 
            String uri = System.getProperty("user.home") + "\\jobbase\\print.pdf"; 

            DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;


            PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
            aset.add(new PrinterName("label", null));
            aset.add(new Copies(1));


            PrintService[] pservices =
                    PrintServiceLookup.lookupPrintServices(flavor, aset);

            if (pservices.length > 0) {

                    DocPrintJob printJob = pservices[0].createPrintJob();

                    try{
                        FileInputStream fis = new FileInputStream(uri);
                        Doc doc = new SimpleDoc(fis, flavor, null);


                        try {
                            printJob.print(doc, aset);
                        } catch (PrintException e) { 
                            System.err.println(e);
                        }

                        } catch(IOException ioe){
                            ioe.printStackTrace(System.out);
                    }
            } else {
                    System.err.println("No suitable printers");
            }
    }
}

3 个答案:

答案 0 :(得分:0)

除非您知道PDF可以理解,否则您不能将PDF发送到打印机。大多数情况下,您需要在客户端上栅格化它。我写了一篇博客文章,解释http://www.jpedal.org/PDFblog/2010/01/printing-pdf-files-from-java/

的选项

答案 1 :(得分:0)

答案 2 :(得分:-1)

如果您知道打印机的名称,则可以实现此目的。在一个客户端中,我需要静默打印:如果存在名为appprinter的打印机,我使用它,如果不是,我尝试使用默认打印机。这很好。

对于打印,我使用ICEPDF

凯特:谢谢你的建议,说实话,IcePDF非常简单,这个例子包含在你可以从上面链接下载的源代码中。为了获得所需的PrinterService(aka打印机),你可以删除键盘请求的所有用户输入,只需使用你想要的名称。

因此,在5.0.5版中:[install-folder] /examples/printservices/PrintService.java

  1. 删除用户对printservice的选择:第106至155行
  2. 添加:

    PrintService selectedService=null;
    for (int j=0;j<services.length;j++) {
        if ("myprintername".equalsIgnoreCase(services[j].getName())) {
            selectedService=aux[j];
        }
    }
    
  3. 希望现在它更有用。

    最好的问候。