【问题标题】:Save pdf to bytearray using itext in Java在Java中使用itext将pdf保存到bytearray
【发布时间】:2020-04-17 11:25:54
【问题描述】:

我正在使用 itext 读取一个大的 pdf 文件并保存选定的页面。

PdfReader reader = null;
reader = new PdfReader("customPath/largePdf.pdf");
int pages = reader.getNumberOfPages();
List<Integer> pagesList = new ArrayList<Integer>();
pagesList.add(1);
pagesList.add(2);
reader.selectPages(pagesList);
String path;
PdfStamper stamper = null;
path = String.format("customerPath/split.pdf");
stamper = new PdfStamper(reader, new FileOutputStream(path));

到目前为止一切顺利,我可以打开 split.pdf 了。

现在,我不想将其保存到文件中,而是将其保存到字节数组中(以便以后可以将其保存为 blob)

试过这个:

PdfReader reader = null;
reader = new PdfReader("customPath/largePdf.pdf");
int pages = reader.getNumberOfPages();
List<Integer> pagesList = new ArrayList<Integer>();
pagesList.add(1);
pagesList.add(2);
reader.selectPages(pagesList);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfStamper stamper2 = new PdfStamper(reader, baos);
byte[] byteARy = baos.toByteArray();

为了确保它有效,我尝试将此字节数组写入文件:

OutputStream out = new FileOutputStream("customPath/fromByteArray.pdf");
out.write(byteARy);
out.close();

fromByteArray.pdf 无法打开且大小为零,您知道可能出了什么问题吗?

【问题讨论】:

  • 您在创建PdfStamper 后立即检索baos.toByteArray()。那时输出中没有(旁边)任何内容。您必须等到关闭 PdfStamper 后才能检索输出。
  • 完美!,你能把这个写成答案吗,我可以接受:)谢谢

标签: java pdf itext


【解决方案1】:

您在创建PdfStamper 后立即检索字节数组(使用baos.toByteArray())。

PdfStamper stamper2 = new PdfStamper(reader, baos);
byte[] byteARy = baos.toByteArray();

当时输出中没有(旁边)任何内容。您必须等到关闭 PdfStamper 后才能检索输出。

PdfStamper stamper2 = new PdfStamper(reader, baos);
...
stamper2.close();
byte[] byteARy = baos.toByteArray();

现在字节数组应该包含完整的加盖 PDF。

【讨论】:

    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多