使用Java中的iText将PDF保存为字节数组

3

我正在使用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打不开,文件大小为零,有任何想法是什么可能出了问题吗?


3
您在创建 PdfStamper 后立即检索 baos.toByteArray()。此时输出几乎为空。您必须等到关闭 PdfStamper 后才能检索输出。该问题与IT有关。 - mkl
完美!你能把这个写成一个答案吗?我可以接受它 :) 谢谢 - Parameswar
1个回答

3

在创建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文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接