使用 itext pdf stamper 在 pdf 中添加多个附件

2024-04-10

我想在一个 pdf 文件中添加多个附件。 当我进入循环时,它只附加最后一个附件。

示例代码

PdfReader reader = new PdfReader(FILE);

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(realPath+"/Temp/"+sosValues.getCmaId()+".pdf"));

for(SOSCustomerOrderFile cmaOrder:orderList)
{
    PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(stamper.getWriter(), null, cmaOrder.getFileName(), cmaOrder.getFileData());
    /*  stamper.getWriter(), null, "test.txt", "Some test".getBytes());*/
    stamper.addFileAttachment("Attachment", fs);
}
stamper.close();

您已经调整了现有示例添加嵌入文件 http://itextpdf.com/sandbox/annotations/AddEmbeddedFile添加多个附件,而您声称只添加了一个附件。

我无法重现这个。我还通过创建一个新示例来调整现有示例:添加嵌入文件 http://itextpdf.com/sandbox/annotations/AddEmbeddedFiles

public static final String[] ATTACHMENTS = {
    "hello", "world", "what", "is", "up"
};
public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    for (String s : ATTACHMENTS) {
        PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
            stamper.getWriter(), null, String.format("%s.txt", s),
            String.format("Some test: %s", s).getBytes());
        stamper.addFileAttachment(String.format("Content: %s", s), fs);
    }
    stamper.close();
}

结果包含所有预期的附件:

我看到的唯一区别是,您为每个嵌入文件指定了相同的名称,但即使我这样做,我仍然可以正确地看到所有附件。

另一个区别是我使用了一个数组String值,但这并不重要,假设cmaOrder.getFileName()确实返回一个文件名(例如“order1.doc”,“order2.xls”,...)cmaOrder.getFileData()返回一个byte[]与该文件的实际字节。通过不告诉我们什么SOSCustomerOrderFile课程的重点是,你强迫我们做出这个假设。

如果磁盘上有该文件,您也可以执行以下操作:

PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
    stamper.getWriter(), cmaOrder.getFilePath(), cmaOrder.getFileName(), null);

即:如果SOSCustomerOrderFile类有一个getFilePath()返回文件路径的方法。我们不知道这一点,我们无权(也不想访问)您的完整代码库。我们只能创建一个SSCCE http://sscce.org为了尝试重现该问题,我们的 SSCCE 告诉我们您的指控是错误的。您可以通过调整我们的 SSCCE 来证明您是正确的,以便我们可以在我们的计算机上运行它并重现问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 itext pdf stamper 在 pdf 中添加多个附件 的相关文章

随机推荐

  • AWS lambda函数在超时错误后停止工作

    我有一个简单的 lambda 函数 它异步进行 API 调用 然后返回数据 99 的情况下这都非常有效 当 API 花费的时间超过 lambda 配置的超时时间时 它会按预期给出错误 现在的问题是 当我对 lambda 函数进行任何后续调用
  • Xcode 5 中的代码签名

    我在 Xcode 5 中验证我的应用程序时遇到问题 我在 2 周前提交了更新 Xcode 4 正常 我没有触及任何证书或配置文件 当我尝试验证时 我得到 当我尝试下载身份时 Xcode 崩溃了 我进入偏爱 gt accounts并刷新了我的
  • 如何删除iOS应用程序中呼叫某人时的弹出窗口? [复制]

    这个问题在这里已经有答案了 我想建议用户从应用程序拨打电话 并弹出一个带有特定文本的窗口 我首先向他展示弹出窗口 如果他同意 然后我运行代码从应用程序拨打电话 但与使用无关tel telprompt tel 对于链接 我总是从系统中弹出第二
  • 使用 Flask wtforms 验证器而不使用表单

    我正在从 iOS 应用程序接收用户注册数据 我想使用 wtforms 附带的验证器来确保电子邮件和密码可接受 但是 我没有使用 Flask 表单 因为用户是从 iOS 文本字段输入数据 是否可以使用 wtforms 验证器检查传入的 JSO
  • 如果 Aurelia 理解“导入”,为什么还要使用依赖注入?

    我不明白 如果我可以使用import在 Aurelia 中 为什么我必须将构造函数与 autoinject 还有这一切 我确信我错过了一些东西 但是 据我所知 我可以随时使用导入的模块 import something from whate
  • 是否可以拥有不可变的 JPA 实体?

    在我们的 Hibernate 项目中 实体是使用 Java bean 模式进行编码的 我们的代码中有很多地方有人忘记设置变异器 并且由于以下原因我们得到了异常NOT NULL约束 是否有人使用构建器来构建他们的实体或使它们不可变 我正在尝试
  • 在 strace 中捕获 vDSO

    我想知道是否有一种方法可以捕获 换句话说观察 vDSO 调用 例如gettimeofday in strace 另外 有没有一种方法可以在不加载的情况下执行二进制文件linux vdso so 1 标志或环境变量 最后 如果我编写一个程序来
  • 使用java查找selenium对象标签

    我以前的代码工作没有问题 并且能够使用 selenium 在网页中找到对象标记 没有任何问题 我正在使用 Chrome 驱动程序来访问该页面 因为我注意到当我使用 IE 时 DOM 内部没有显示任何内容 并且我需要访问对象标记的内容 也就是
  • 运行进程隐藏的Python

    我是 python 新手 正在编写新代码 需要一些帮助 主要文件 import os import time import sys import app import dbg import dbg import me sys path ap
  • Internet Explorer 和剪辑路径

    据我所知 clip path 应该在 IE 中工作 如许多文章和本教程中所示CSS 屏蔽 http www html5rocks com en tutorials masking adobe redirect from locale fr
  • 创建自签名 SSL 证书时出错

    我尝试根据链接中的说明创建自签名证书mosca MQTT 代理的安全密钥和证书 https stackoverflow com questions 39913842 security key and cert for mosca mqtt
  • 将实体框架中的字符串列映射到枚举

    有没有办法将字符串列映射到实体模型中的枚举 我已经在 Hibernate 中完成了此操作 但在 EMF 中无法弄清楚 可能是更好的版本 OrderStateIdentifier 字段用于 JSON 序列化和数据库字段 而OrderState
  • Spring Boot MongoDB 连接问题

    我的 Spring Boot 应用程序正在尝试连接到 MongoDB 数据库 配置添加到 application yml 文件中 直到昨天 该应用程序在本地运行得完全正常 但是今天当我在本地主机上本地运行它时 我收到以下错误 2020 12
  • ngClass 中的多个类

    我正在尝试在 ngClass 中添加多个值 该值过去适用于以前的 alpha 版本 但现在似乎不适用于 angular2 beta i i 它会产生一个错误 异常 类型错误 无法读取未定义的属性 add fa fa star 在 PostV
  • 策略模式和命令模式的区别

    两者有什么区别策略模式 http en wikipedia org wiki Strategy pattern和命令模式 http en wikipedia org wiki Command pattern 我也在寻找一些 Java 的例子
  • 我可以将其序列化为 json 字符串并查看它,而不是使用反射来循环访问类属性吗?它有什么缺点吗?

    假设我有一个像下面这样的课程 class Student public int ID get set public string Name get set 只是还有 10 个属性 我想循环遍历这些属性 我可以通过反射来完成 这会有性能成本
  • 使用 ODataQueryOptions 扩展导航属性

    我正在构建一个 OData v 4 Web 服务 该服务必须公开从另一个第 3 方 Web 源检索的数据 因此该数据与 LINQ 世界中的任何内容都不相同 即 没有 IQueryable 没有 Context 什么都没有 解决方法似乎是手动
  • 在 Win32 上构建适用于 Android (ARMv7) 的 OpenSSL

    如何在 Win32 上构建适用于 Android ARM v7 使用 Android NDK 的 OpenSSL 直到 OpenSSL 的出现wiki http wiki openssl org index php Android和 set
  • 如何在 JMeter 中使用命令行参数

    我正在使用 Jmeter 测试 API 我想从终端参数化项目的路径 然后我想在 JMeter 中使用此参数 我通过命令行发送的参数 jmeter n t your script jmx Jurl abcdef com 我在用户定义变量中使用
  • 使用 itext pdf stamper 在 pdf 中添加多个附件

    我想在一个 pdf 文件中添加多个附件 当我进入循环时 它只附加最后一个附件 示例代码 PdfReader reader new PdfReader FILE PdfStamper stamper new PdfStamper reader