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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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 中不可用,也不会,请参阅此处的讨论。我建议您改用 qpdf 对文件进行后处理。


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

原因可能是:"支持线性化 PDF 会花费很多工作,但现在大部分时间都没有用。"

众所周知,设计线性化 PDF 时(1996 年)的网络速度非常低。因此,线性化 PDF 是快速查看 PDF 的第一页并在 Web 上打开时快速跳转到 PDF 的任意页面所必需的,尽管生成线性化 PDF 的实现非常复杂。不过现在网速快多了。大多数 PDF 文件的大小小于 10 MB,下载一个 PDF 文件可能需要不到一秒钟的时间。你看,现在一个PDF文件是否被线性化并不重要。由于是否不需要线性化,实现线性化 PDF 需要做很多工作,所以没有开源库可以做到。

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

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