3

我有一些用于创建 pdf 的 .jpg 文件。我一直在寻找几个小时,但没有找到任何方法来线性化 pdf!我很难找到有关如何执行此操作的任何文档或指南,现在希望在这里获得一些帮助。我还查看了 pdfbox 2.0 API 文档,但找不到任何有用的东西。我以前在 ocassion 上使用过 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

4

2 回答 2

1

很抱歉带来坏消息,但它在 PDFBox 中不可用,也不会,请参阅此处的讨论。我建议您改用 qpdf对文件进行后处理。

于 2016-09-30T17:31:40.500 回答
0

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

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

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

如果你必须制作线性化的PDF,我认为你只能使用Adobe Acrobat来做。

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

于 2017-09-19T03:07:01.220 回答