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,它解决了我的问题。这是一个例子:
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 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 生成功能。所以我可以说没有开源开发者会去做,因为大多数时候它是非常无聊和无用的。我这样做的原因是:公司给我发工资。 ?€_?€