如何使用Java中的pdfbox 2.0创建一个线性化(快速网络视图)PDF?

3

我有一些.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文档,版本1.4 400dpi_90.pdf未线性化 400dpi_90-out.pdf: PDF文档,版本1.6 400dpi_90-out.pdf没有线性化错误

2个回答

1
抱歉带来不好的消息,但是PDFBox中没有该功能,而且也不会有,详见此处讨论。我建议您使用qpdf对文件进行后处理。

这正是我担心的。我会尝试查看qpdf并在了解更多后回来。谢谢! - Don B

1
很遗憾,据我所知,目前没有开源库支持生成线性化的PDF文件。原因可能是:支持线性化PDF需要花费大量工作,但现在大多数情况下是无用的。 我们知道,在设计线性化PDF的1996年,网络速度非常慢。因此,当在Web上打开PDF并需要快速查看第一页和快速跳转到任意页面时,线性化PDF是必要的,尽管生成线性化PDF的实现非常复杂。但是,现在的网络速度要快得多。大多数PDF文件的大小都小于10 MB,下载一个PDF文件可能只需要不到一秒钟的时间。你看,现在是否线性化一个PDF文件并不重要。因为是否线性化不是必要的,而实现线性化PDF将需要很多工作,因此没有开源库来实现它。 如果您必须创建线性化PDF,我认为您只能使用Adobe Acrobat来完成。

PS:我已经在公司开发线性PDF生成功能超过两个月了。所以我可以说,没有任何开源开发人员会这样做,因为大多数时候它非常无聊和无用。我之所以这么做是因为公司支付我的薪水。π_π


5
qpdf是一款用于处理PDF文件的工具。运行命令qpdf --linearize in.pdf out.pdf可以将输入的PDF文件in.pdf进行线性化处理,并输出为名为out.pdf的新文件。这样可以使得该PDF文件能够更快地在网络上加载和显示。 - BHSPitMonkey

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