使用 Java 中的 itext 将 pdf 保存到 bytearray

Save pdf to bytearray using itext in Java

我正在使用 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 stamper2 = new PdfStamper(reader, baos);
byte[] byteARy = baos.toByteArray();

那时输出中(旁边)什么也没有。您必须等到 PdfStamper 关闭后才能检索输出。

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

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