使用 PdfMerger iText7 将 PdfDocument 转换为 byte[]

2024-03-29

我有一个要求,我使用生成不同的 pdf'iText 7.1.11。我在用PdfMerger即时合并所有 pdf。我能够在本地系统成功生成 pdf,但应用程序需要发送bye[]作为回应。我找到的解决方案here https://kb.itextpdf.com/home/it7kb/faq/how-can-i-serve-a-pdf-to-a-browser-without-storing-a-file-on-the-server-side and here https://javatorch.wordpress.com/2013/09/19/generate-a-pdf-using-itext-as-a-byte-array/。但问题是PdfMerger不接受Document对象,我不确定是否恢复我的代码以使用Document代替PdfDocument它是否有效。 下面是我尝试过的代码。

 public static void createPdf(List<String> src, String dest, PageSize pageSize, boolean rotate, String baseUri) throws IOException {
    ConverterProperties properties = new ConverterProperties();
    properties.setBaseUri(baseUri);
    FontProvider fontProvider = new DefaultFontProvider(false,false,true);
    properties.setFontProvider(fontProvider);
    
    /** tried this to make return byte[] in response
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    PdfDocument pdf = new PdfDocument(new PdfWriter(byteArrayOutputStream));
    Document doc = new Document(pdfDoc); **/

    ///////////// Working on Local/////
    PdfWriter writer = new PdfWriter(dest); // 'dest' is local file system path 
    PdfDocument pdf = new PdfDocument(writer);
    PdfMerger merger = new PdfMerger(pdf);

    for (String html : src) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfDocument temp = new PdfDocument(new PdfWriter(baos));
        if(rotate) {
            temp.setDefaultPageSize(pageSize.rotate()); /** Page Size and Orientation */
        } else {
            temp.setDefaultPageSize(pageSize); /** Page Size and Orientation */
        }
        HtmlConverter.convertToPdf(html, temp, properties);
        temp = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
        merger.merge(temp, 1, temp.getNumberOfPages());
        temp.close();
    }
    pdf.close();}

请帮助我,因为这个简单的事情似乎很难实现


这就是您初始化的方式PdfMerger:

PdfWriter writer = new PdfWriter(dest); // 'dest' is local file system path 
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);

IE。您明确写入本地文件系统,甚至在注释中强调这一事实。

如果您想将合并后的 PDF 保存在byte[]最后,你为什么不简单地使用ByteArrayOutputStream在这里(正如您声称您之前已经尝试过几行):

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(byteArrayOutputStream );
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
...
pdf.close();
byte[] bytes = byteArrayOutputStream.toByteArray();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PdfMerger iText7 将 PdfDocument 转换为 byte[] 的相关文章

随机推荐

  • aws apigateway lambda 始终返回 502

    我已经为我的代理服务器创建了 aws apigateway lambda 集成 当我向网关发出 get 请求时 请求已成功通过 lambda 函数也成功执行 并在输出流中写入响应 statusCode 为 200 但 apigateway
  • 以编程方式启动 EA

    我想通过 Windows 服务打开 EA 会话并在幕后执行一些操作 我使用 Repository API 但是不知道如何正确初始化它 EA Repository repository repository OpenFile C test e
  • 如何在 .ashx 上手动创建 ODataQueryOptions

    我想重建我的上一个项目 过去 我没有使用任何 Web API 我可以使用 ODataQueryOptions 来执行 filter orderby top skip 操作吗 对于我自己的 handler ashx 中的查询 就像是 var
  • e.preventdefault();不工作

    我真的很难得到e preventDefault 上班 这是我的代码 ListSnapshot a live click function e var url this attr href WebPartWPQ2 ms listviewtab
  • 在 MKMapView 上安装注释,同时保持用户位置居中

    我正在尝试将所有注释放入我的MKMapView同时将当前用户位置保持在地图中心 已经有很多参考资料 1 2 介绍如何缩小区域以适合地图上的注释 但它们会调整当前的中心位置 例如如果所有注释都位于我当前用户位置的东部 它将进行调整 以便当前用
  • 在现有数据库上使用 liquibase

    我们有一个正在生产的现有数据库 我们决定使用 liquibase 进行所有进一步更新并创建任何新数据库 例如开发或集成 我们根据现有的生产模式创建了 liquibase 脚本 以创建任何新的数据库 如开发 集成等 除了该脚本之外 我们还添加
  • 当终止使用 python 子进程 Popen 启动的进程时,如何关闭标准输出管道?

    我想知道当杀死在不同线程中启动的子进程时是否可以关闭通信管道 如果我不调用communicate 那么kill 将按预期工作 在一秒而不是五秒后终止进程 我发现了类似问题的讨论here http bugs python org issue4
  • 从绘图 3d 图中抓取相机位置

    我正在绘制 3D 图形并想要调整相机位置 对我来说最好的方法是使用查看器 根据需要缩放和旋转场景 然后以 JSON 形式获取相机位置并将其放入我的脚本中 该脚本生成图片以默认实现相同的位置 根据这条推文 https twitter com
  • 缓存反射属性 getter/setter 的最佳方法?

    我知道反射可能会很昂贵 我有一个经常获取 设置属性的类 我想到的一种方法是以某种方式缓存反射 我不确定我是否应该缓存表达式或在这里真正做什么 这就是我目前正在做的事情 typeof T GetProperty propName SetVal
  • 如何使用 ie8 检测文本输入何时发生变化

    我想检测文本输入何时发生变化 我尝试了这些 在 Firefox 中有效 但在 ie 8 中无效 taskSearch bind input function alert this val taskSearch live input func
  • 防止手动添加的库被ndk-build删除

    我有一个项目正在重用预编译的本机库 libocr so 但我没有源文件 我手动将库放在项目的 libs armeabi 上 一切正常 然后我需要为同一个项目创建一个新的本机库 我将源代码与 Android mk 文件一样放在 jni 文件夹
  • itertool 中列表的条件笛卡尔积

    我有四个清单 LISTA A1 A2 LISTB B1 C B2 D LISTC C1 C2 LISTD D1 D2 我想要得到的笛卡尔积LISTA and LISTB 然后根据 B 的值 我想添加 C 的乘积或 D 的乘积 A1 B1 C
  • 仅使用一个映射器的 Hadoop gzip 输入文件[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 hadoop 不能分割一个大文本文件 然后使用 gzip 压缩分割的内容 https stackoverflow com questions 6511255 why cant hadoop s
  • 获取当前的 python 模块对象(按名称或其他方式)

    如果我想获取当前模块 例如要重新加载它 我会这样做 import sys sys modules name 有没有更好的方法来做到这一点 例如不涉及 name 在这种情况下 更好意味着更惯用 更便携 更健壮 或者更多 我们通常在软件中希望的
  • 如何在Spring JPA for MySQL中设置@Id @GenerateValue的初始值?

    我不知道如何设置初始值 GenerateValue Id 我尝试过使用GenerationType SEQUENCE但这是不允许的MySQL 如何设置用于的初始值 GenerateValue 两者同时使用AUTO and TABLE我仍然无
  • magento 的 customer.xml 布局文件中的附加参数

    我正在尝试通过空白主题中的 customer xml 文件 这是在 Magento 1 4 1 1 中 向顶级客户链接 我的帐户 我的购物车等 添加一些解释性文本 我认为magento通过发出afterText或beforeText参数具有
  • 如何在不破坏localStorage中类型的情况下存储和获取对象?

    我正在使用 TypeScript 开发 AngularJS 项目 A person是一个对象Person班级 我需要存储person对象在localStorage并用它的类型检索它 窗口本地存储 https developer mozill
  • Android 创建日历事件

    我需要为 Android 应用程序创建多个日历事件 使用这个question https stackoverflow com questions 3721963 how to add calendar events in android 4
  • 从 C# 中的文本文件中读取数字

    这应该是很简单的事情 我只想从由空格分隔的标记组成的文本文件中读取数字和单词 在 C 中如何做到这一点 例如 在 C 中 以下代码可以读取整数 浮点数和字 我不想使用正则表达式或编写任何特殊的解析代码 ifstream in file tx
  • 使用 PdfMerger iText7 将 PdfDocument 转换为 byte[]

    我有一个要求 我使用生成不同的 pdf iText 7 1 11 我在用PdfMerger即时合并所有 pdf 我能够在本地系统成功生成 pdf 但应用程序需要发送bye 作为回应 我找到的解决方案here https kb itextpd