java - 在Java中使用itext将pdf保存到bytearray
问题描述
我正在使用 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 没有打开并且大小为零,知道可能出了什么问题吗?
解决方案
baos.toByteArray()
在创建PdfStamper
.
PdfStamper stamper2 = new PdfStamper(reader, baos);
byte[] byteARy = baos.toByteArray();
那时输出中没有(旁边)任何内容。相反,您必须等到关闭之后PdfStamper
才能检索输出。
PdfStamper stamper2 = new PdfStamper(reader, baos);
...
stamper2.close();
byte[] byteARy = baos.toByteArray();
现在字节数组应该包含完整的加盖 PDF。
推荐阅读
- javascript - 随时检查 URL 在 JavaScript 中的 URL 更改
- c++ - 从内存中删除 OpenVDB 对象
- javascript - useState() 是异步的问题
- php - laravel orm :按 id 排序,但将另一列的 0 值放在末尾
- java - 动态想要从其他片段中获取图像
- python - 使用 Keras 询问有关 EEG 分类的建议
- python - 如何全球化传入的函数变量python3
- visual-studio-code - 当我尝试发布扩展时 vsce 导致错误
- three.js - Three.js如何在AR应用程序上触摸按钮时更改一个对象的两种材质
- android - 查找未在 app:dependencies 任务中列出的依赖项