2016-07-14 127 views
1

我能够创建一个PDF文件使用PDFBox的(版本1.8.9),然后用下面的代码转换成PostScript文件:如何使用PDFBOX PDF文件转换成PostScript文件2.0

DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE; 
    StreamPrintServiceFactory[] factories = 
      StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor, 
        DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType()); 
    if (factories.length == 0) { 
     throw new PrinterException("No PostScript factories available"); 
    } 
    PDDocument document = pdfGenerator.getDocument(); 

    // Attributes are specified by https://docs.oracle.com/javase/7/docs/api/ 
    // see package javax.print.attribute.standard 
    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
    aset.add(MediaSizeName.NA_LETTER); 
    aset.add(new PageRanges(1, document.getNumberOfPages())); 

    FileOutputStream fos = new FileOutputStream(filePathAndName); 
    factories[0].getPrintService(fos).createPrintJob().print(
      new SimpleDoc(new PDPageable(document), flavor, null), aset); 
    fos.close(); 
    document.close(); 

PDPageable对象似乎不在PDFBox 2.0代码中,我没有在迁移文档中看到它。如何使用PDFBox 2.0将PDF文件转换为PostScript文件?

谢谢

+2

有一个PDFPageable。 –

+0

如果您发现问题的答案,将其作为答案发布很有帮助。这样,其他人可以从你发现的东西中学习。 –

+0

谢谢。我最终做的是使用PDFBox在PDF中读回,并使用PDFBox从PDF读取的x/y坐标自己写出后脚本命令。我不想让自己发布脚本命令,但这是我发现可以创建合理大小的脚本文件的唯一方式。 PDPageable类将每个PDF页面写为一个图像,以便后脚本文件比我需要的大很多倍。 – user3991484

回答

0

你是对的,在PDFBoxversion 1.18.12 Package org.apache.pdfbox.pdmodel有PDPageable类,但相应的version 2.0.3 Package org.apache.pdfbox.pdmodel没有。

但是你想要做的是转换为PostScript语言文档。我认为PDFPrintable会为你做到这一点。

看到这个其他SO问题,Printing to PostScript with PDFBox produces a massive file, why?,显示使用中的PDFPrintable的代码片段。我简化了一下,并将其包含在下面。它看起来很熟悉吗? :-)

PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
    aset.add(MediaSizeName.NA_LETTER); 

FileOutputStream fos = new FileOutputStream(filePathAndName); 
StreamPrintService sps = factories[0].getPrintService(fos); 
     DocPrintJob dpj = sps.createPrintJob(); 
     SimpleDoc sd = new SimpleDoc(new PDFPrintable(document, Scaling.ACTUAL_SIZE, false), flavor, null); 
     factories[0].getPrintService(fos).createPrintJob().print(
       new SimpleDoc(new PDFPrintable(document, Scaling.ACTUAL_SIZE, false), flavor, daset), aset); 
fos.close(); 
document.close();