如何在 Java 中使用 pdfbox 2.0 创建线性化(快速 Web 视图)pdf?

How to create a linearized (fast web view) pdf using pdfbox 2.0 in Java?

我有一些 .jpg 文件用于创建 pdf。我一直在寻找几个小时,但没有找到任何线性化 pdf 的方法!我很难找到任何关于如何做的文档或指南,现在我希望能在这里得到一些帮助。我还查看了 pdfbox 2.0 API 文档,但找不到任何有用的信息。我以前偶尔使用过 pdfbox,但主要用于拆分或合并 pdf。 这是我到目前为止写的:

private static void createPdf()
{
    PDDocument doc = new PDDocument();
    try
    {
        File images = new File("images/");
        for (File image : images.listFiles())
        {
            PDPage page = new PDPage();
            doc.addPage(page);
            BufferedImage awtImage = ImageIO.read(image);
            PDImageXObject pdImageXObject = LosslessFactory.createFromImage(doc, awtImage);
            PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true);
            contentStream.drawImage(pdImageXObject, 0, 0, (float) (awtImage.getWidth() / 5.4), (float) (awtImage.getHeight() / 5.9));
            contentStream.close();
        }
        doc.setVersion(1.6f);
        doc.save("pdf/images_v1.6.pdf");
    }
    catch (Exception io)
    {
        System.err.println(" -- fail --" + io);
    }
    finally
    {
        try
        {
            doc.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

非常感谢任何建议!

编辑解决方案: 我已经按照 Tilman Hausherr 的建议尝试了 qpdf,它解决了我的问题。这是一个例子:

file 400dpi_90.pdf qpdf --show-linearization 400dpi_90.pdf qpdf --linearize --min-version=1.6 400dpi_90.pdf 400dpi_90-out.pdf file 400dpi_90-out.pdf qpdf --check-linearization 400dpi_90-out.pdf

上面的结果如下图:

400dpi_90.pdf: PDF document, version 1.4 400dpi_90.pdf is not linearized 400dpi_90-out.pdf: PDF document, version 1.6 400dpi_90-out.pdf: no linearization errors

抱歉带来坏消息,但它在 PDFBox 中不可用,以后也不会,请参阅讨论 here. I suggest you postprocess your file with qpdf

不幸的是,据我所知,没有支持生成线性化 PDF 文件的开源库。

原因可能是:"Supporting linearized PDF will cost much work but it's useless most of the time now."

众所周知,设计线性化PDF的时候(1996年)网速非常低。所以线性化的PDF对于在网页上快速浏览第一页和快速跳转到PDF的任意页面是很有必要的,尽管生成线性化PDF的实现非常复杂。但是现在网速快多了。大多数 PDF 文件的大小都小于 10 MB,下载一个 PDF 文件可能需要不到一秒钟的时间。你看,现在一个 PDF 文件是否被线性化并不重要。由于是否线性化不是必须的,实现线性化的PDF工作量很大,所以目前还没有开源库实现。

如果非要做线性化的PDF,我觉得只能用Adobe Acrobat来做。

PS:我正在为我工​​作2个多月的公司开发线性化PDF生成功能。所以我可以说没有开源开发者会去做,因为大多数时候它很无聊而且没用。我这样做的原因是:公司给我发工资。 π_π