[英]Appending a data in itext in existing pdf
我正在使用itext pdf庫。 我想在現有pdf的末尾添加內容。
比如說現有的pdf(比如Original.pdf)有4個頁面,所以我想添加另一個頁面,即第5頁,內容為Hello World我添加的內容並保存在同一個pdf中,即Original.pdf
關閉后,我的Original.pdf將包含5個頁面,即4個頁面(默認內容已經有)+ 1個頁面包含內容Hello World我添加了內容
我正在使用此代碼,但顯示異常
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
和FileInputStream
。
我建議在ByteArrayOutputStream上保存pdf,關閉壓模,然后將ByteArrayOutputStream
保存在文件中。
我使用了IOUtils.write(byte [] data,OutputStream輸出)方法來保存FileOutputStream
的ByteArrayOutputStream
。
我測試了這個並且它有效:
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);
那么你可以做這樣的事情。
String out="Original.pdf";
File oldFile = new File(out);
try {
Document document = new Document();
PdfCopy filePdfCopy = new PdfCopy(document,
new FileOutputStream(oldFile, true));
document.open();
PdfReader reader = new PdfReader(newFile.getAbsolutePath());
PdfReader reader_old = new PdfReader(
oldFile.getAbsolutePath());
filePdfCopy.addDocument(reader);
filePdfCopy.addDocument(reader_old);
filePdfCopy.close();
reader.close();
reader_old.close();
document.close();
stats.addMergedPdf();
} catch (FileNotFoundException e) {
logger.error("FileNotFoundException: ", e);
stats.addError();
} catch (DocumentException e) {
logger.error("DocumentException: ", e);
stats.addError();
} catch (IOException e) {
logger.error("IOException: ", e);
stats.addError();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.