试试如下代码import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import java.io.*;public class PrintFileTest{    public static String TMP_FILE="C:\\172.gif";
    public static void main(String[] args){
      String filename = TMP_FILE;
      PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
      DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
      PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
      PrintService defaultService =   PrintServiceLookup.lookupDefaultPrintService();
      PrintService service = ServiceUI.printDialog(null, 200, 200,printService, defaultService, flavor, pras);
      if (service != null) {
        try
        {
          DocPrintJob job = service.createPrintJob();
          FileInputStream fis = new FileInputStream(filename);
          DocAttributeSet das = new HashDocAttributeSet();
          Doc doc = new SimpleDoc(fis, flavor, das);
          job.print(doc, pras);
     //     Thread.sleep(10000);
        }catch(Exception e)
        {
          e.printStackTrace();
        }
      }
      System.exit(0);
    }
}下面是的PDF是Java中那两个打印包的用法,还有例子,大家可以下下来看看。
http://java.sun.com/j2se/1.4.2/pdf/JPS_PDF.pdf

解决方案 »

  1.   

    真是个奇怪的问题!一般的说,你只需要在客户端安装Acrobat即可。
      

  2.   

    CoolAbu(阿卜-Never Stop):
    当我改为
    DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF
    之后就找不到可用的打印机 也就是printService[] 长度为0
    请指点
      

  3.   

    你把Flavor改成如下的试试。
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE
      

  4.   

    我改为DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE  要么是抛出flavor不匹配的异常 要么打印出好多00111的二进制字符
    急啊!!!
      

  5.   

    上面那段代码是不行的,因为java本身并没有pdf文件的解析,他只是提供service.你得自己实现.所以最简单的就是在client安装Acrobat,然后通过activex技术嵌进来。
    当然adobe去下载pure的pdf viewer然后可以很好的嵌放你的程序,不过很报谦,他现在还不支持中文。