如何使用pdfbox 2.0将PDF文件转换为PostScript文件

3

我使用PDFBox(版本1.8.9)创建了一个PDF文件,然后通过以下代码将其转换为PostScript文件:

    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。 - Tilman Hausherr
如果你找到了问题的答案,将其发布为答案会很有帮助。这样,其他人就可以从你发现的东西中学习到知识。 - Jim DeLaHunt
1
谢谢。我最终使用PDFBox读取PDF并使用PDFBox从PDF中读取的x/y坐标手动编写后置命令,以此创建一个大小适中的后置脚本文件是我找到的唯一方法。我不想学习后置命令,但这是我发现的唯一方法。PDPageable类将每个PDF页面都写作图像,因此后置脚本文件比我需要的大得多。 - user3991484
1个回答

2
你是对的,在 PDFBox 中,版本1.18.12包org.apache.pdfbox.pdmodel 有一个PDPageable类,但相应的 版本2.0.3包org.apache.pdfbox.pdmodel 没有。
但是你想要做的是将其转换为PostScript语言文档。我认为 PDFPrintable 可以帮助你完成这个任务。
查看这个其他的SO问题,使用PDFBox打印到PostScript会产生大文件,为什么?,其中有一个代码片段展示了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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接