java – 如何从iText PDFReader获取字节数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何从iText PDFReader获取字节数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2363字,纯文字阅读大概需要4分钟。
内容图文
![java – 如何从iText PDFReader获取字节数组](/upload/InfoBanner/zyjiaocheng/704/ebf898f244384c66aac2d544539fa8de.jpg)
如何从Itext PDFReader获取字节数组.
float width = 8.5f * 72;
float height = 11f * 72;
float tolerance = 1f;
PdfReader reader = new PdfReader("source.pdf");
for (int i = 1; i <= reader.getNumberOfPages(); i++)
{
Rectangle cropBox = reader.getCropBox(i);
float widthToAdd = width - cropBox.getWidth();
float heightToAdd = height - cropBox.getHeight();
if (Math.abs(widthToAdd) > tolerance || Math.abs(heightToAdd) > tolerance)
{
float[] newBoxValues = new float[] {
cropBox.getLeft() - widthToAdd / 2,
cropBox.getBottom() - heightToAdd / 2,
cropBox.getRight() + widthToAdd / 2,
cropBox.getTop() + heightToAdd / 2
};
PdfArray newBox = new PdfArray(newBoxValues);
PdfDictionary pageDict = reader.getPageN(i);
pageDict.put(PdfName.CROPBOX, newBox);
pageDict.put(PdfName.MEDIABOX, newBox);
}
}
从上面的代码我需要从reader对象获取字节数组.怎么样?
1)不工作,得到空byteArray.
OutputStream out = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, out);
stamper.close();
byte byteArray[] = (((ByteArrayOutputStream)out).toByteArray());
2)不工作,得到java.io.IOException:错误:Header不包含versioninfo
ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
for (int i = 1; i <= reader.getNumberOfPages(); i++)
{
outputStream.write(reader.getPageContent(i));
}
PDDocument pdDocument = new PDDocument().load(outputStream.toByteArray( );)
有没有其他方法从PDFReader获取字节数组.
解决方法:
让我们从不同的角度来看问题.在我看来,您希望逐页呈现PDF.如果是这样,那么你的问题就错了.提取页面内容流是不够的,因为我已经指出:没有一个渲染器能够渲染这样的流,因为你没有传递任何资源,如字体,Form和Image XObjects,……
如果要从PDF渲染单独的页面,则需要将文档分成单独的单页完整PDF文档.这些单页文档需要包含呈现页面所需的所有信息.这不是内存友好的:假设你有一个100页的10页文档,每页显示一个80 KB的标识,你最终会得到10个文件,每个文件至少80 KByte(10个文件已经是800 KByte,不仅仅是10页的文档,其中10页共享一个Image XObject).
你需要做这样的事情:
PdfReader reader = new PdfReader("source.pdf");
int n = reader.getNumberOfPages();
reader close();
ByteArrayOutputStream boas;
PdfStamper stamper;
for (int i = 0; i < n; ) {
reader = new PdfReader("source.pdf");
reader.selectPages(String.valueOf(++i));
baos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, baos);
stamper.close();
doSomethingWithBytes(baos.toByteArray);
}
在这种情况下,baos.toByteArray()将包含有效PDF文件的字节.在任何尝试中都不是这种情况.
内容总结
以上是互联网集市为您收集整理的java – 如何从iText PDFReader获取字节数组全部内容,希望文章能够帮你解决java – 如何从iText PDFReader获取字节数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。