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

时间:2016-09-30 13:27:17

标签: java pdf pdfbox linearization

我有一些我用来制作pdf的.jpg文件。我现在一直在寻找几个小时,没有太多运气找到如何线性化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

2 个答案:

答案 0 :(得分:0)

很抱歉带来了坏消息,但它不能在PDFBox中使用而且不会,请参阅讨论here。我建议您使用qpdf对文件进行后处理。

答案 1 :(得分:0)

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

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

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

如果您必须制作线性化PDF,我认为您只能使用Adobe Acrobat来执行此操作。

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

相关问题