使用 javax.print 将纯文本文件打印到 PDF 打印机会产生一个空文件

我需要从纯文本文件创建一个 pdf 文件。我认为最简单的方法是读取这些文件并将它们打印到 PDF 打印机。我的问题是,如果我打印到 pdf 打印机,结果将是一个空的 pdf 文件。如果我打印到 Microsoft XPS Document Writer,文件将以纯文本格式创建,而不是 oxps 格式。我会对两步或三步的解决方案感到满意。(例如,先转换为 xps,然后使用 ghostscript 或类似方法转换为 pdf)。我尝试了几种 pdf 打印机,例如:CutePDF、Microsoft PDF writer、Bullzip PDF。每个人的结果都是一样的。


环境为Java 1.7/1.8 Win10


private void print() {


    try {

        DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;


        PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();                   

        PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);

        if (ps.length == 0) {

            throw new IllegalStateException("No Printer found");

        }

        System.out.println("Available printers: " + Arrays.asList(ps));

        PrintService myService = null;

        for (PrintService printService : ps) {

            if (printService.getName().equals("Microsoft XPS Document Writer")) { // 

                myService = printService;

                break;

            }

        }

        if (myService == null) {

            throw new IllegalStateException("Printer not found");

        }


        myService.getSupportedDocFlavors();

        DocPrintJob job = myService.createPrintJob();



   FileInputStream fis1 = new FileInputStream("o:\\k\\t1.txt");


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


        HashPrintRequestAttributeSet pr = new HashPrintRequestAttributeSet();

        pr.add(OrientationRequested.PORTRAIT);

        pr.add(new Copies(1));

        pr.add(MediaSizeName.ISO_A4);

        PrintJobWatcher pjw = new PrintJobWatcher(job);

        job.print(pdfDoc, pr);

        pjw.waitForDone();

        fis1.close();


    } catch (PrintException ex) {

        Logger.getLogger(Docparser.class.getName()).log(Level.SEVERE, null, ex);

    } catch (Exception ex) {

        Logger.getLogger(Docparser.class.getName()).log(Level.SEVERE, null, ex);

    }

}

慕勒3428872
浏览 289回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java