我正在与文本 pdf图书馆。我想在现有 pdf 的末尾添加内容。
举例来说,现有的 pdf(例如 Original.pdf)有 4 页,所以我想添加另一页,即第 5 页的内容你好世界我添加了内容并将其保存在同一个 pdf 中,即原件.pdf
所以关闭后我的 Original.pdf 将包含5页面即4 页(默认内容已有)+ 1 页有内容你好世界我添加了内容
我正在使用这段代码但显示异常
String in="Original.pdf";
String out="Original.pdf";
PdfReader reader = new PdfReader(in);
PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(out));
int totalPages=reader.getNumberOfPages();
stamper.insertPage(totalPages+1, PageSize.A4);
stamper.addAnnotation(
PdfAnnotation.createText(
stamper.getWriter(),
new Rectangle(30f, 750f, 80f, 800f),
"inserted page", "This page is the title page.",
true,
null)
,
reader.getNumberOfPages()
);
stamper.close();
java.io.EOFException
提前致谢。
我认为问题出在你正在使用的事实FileOutputStream
and a FileInputStream
在同一个文件上。
我建议将 pdf 保存在 ByteArrayOutputStream 上,关闭压模,然后保存ByteArrayOutputStream
在你的文件中。
我用过IOUtils.write(byte[]数据,OutputStream输出) http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html方法来保存ByteArrayOutputStream
in the FileOutputStream
.
我已经测试过这个并且它有效:
String in = "Original.pdf";
String out = "Original.pdf";
PdfReader reader = new PdfReader(in);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, baos );
int totalPages = reader.getNumberOfPages();
stamper.insertPage(totalPages + 1, PageSize.A4);
stamper.addAnnotation(PdfAnnotation.createText(stamper.getWriter(), new Rectangle(30f, 750f, 80f, 800f), "inserted page", "This page is the title page.", true, null),
reader.getNumberOfPages());
stamper.close();
FileOutputStream fileOutputStream = new FileOutputStream(out);
IOUtils.write(baos.toByteArray(), fileOutputStream);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)