使用Java中的itext将pdf保存到字节数组中



我正在使用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。

最新更新