java - 将页面的多个副本插入 PDF

标签 java pdf itext

据我所知,PDF 支持对对象的引用。因此,例如,如果我在文档中使用同一张图片 100 次 - 它可以优化为在每个地方都使用同一张图片,从而大大节省 PDF 大小。

PDF 是否支持整页数据?如果是,我该如何使用 iText 库来实现?

我的问题是,我有一个约 500 页的巨大文档,每 2-3 页我需要插入从其他 PDF 文档读取的相同模板页面。代码如下所示:

    protected static void addAppendix(PdfWriter writer, Document document, InputStream appendixStream)
            throws IOException {
        PdfContentByte cb = writer.getDirectContent();
        PdfReader reader = new PdfReader(appendixStream);
        for (int idx = 1; idx <= reader.getNumberOfPages(); ++idx) {
            document.newPage();
            PdfImportedPage imported = writer.getImportedPage(reader, idx);
            cb.addTemplate(imported, 0, 0);
        }
        writer.freeReader();
    }

但是,这会大大增加 PDF 的大小,尤其是当附录包含一些大图像和内容时。有什么方法可以以某种方式优化我的文档的大小吗?

最佳答案

不要销毁 PdfReader 而是重新使用它。

步骤:
1 - 创建指向 output.pdf 的文档和 PdfWriter
2 - 打开指向您的 appendix.pdf 的 PdfReader
3 - 向您的页面添加内容
4 - 添加附录页面阅读形式 PdfReader
5 - 根据需要重复步骤 3 和 4
6 - 关闭 PdfRerader
7 - 关闭 PdfWriter 和文档

关于java - 将页面的多个副本插入 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19853144/

相关文章:

java - 具有多个表连接和 sum()、first() 的 HQL

java - 如何等待 sendBroadcast 完成

android - 在 android 和 IOS phonegap 应用程序中读取 pdf 文件

java - 使用 iText 将包含表单的 PDF 转换为仅包含文本的 PDF(保留数据)

c# - 如何圆化 iTextSharp 表格边框的角?

Java 数字模式递归

java - Tomcat 两个项目相互通信

python - 在段落中插入水平线 [ Reportlab ]

macos - 在 Mac Adob​​e Reader 上验证数字签名

java - iText:带有 PdfpTable 的 Pdf 专色