Добавление данных в itext в существующий PDF - PullRequest
3 голосов
/ 07 марта 2012

Я работаю с itext pdf библиотекой.Я хочу добавить контент в конце существующего pdf.

Скажем, например, что существующий pdf (скажем, Original.pdf) имеет, скажем, 4 страницы, поэтому я хочу добавить еще одну страницу, т.е. страницу № 5 сcontent Hello World Я добавил контент и сохранил его в том же pdf, т.е. Original.pdf

Так что после закрытия мой Original.pdf будет содержать 5 страниц, т.е. 4 страницы (с содержимым по умолчанию, которое у них уже есть) + 1 страница с содержимым Hello World, я добавил содержимое

IЯ использую этот код, но показываю исключение

        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

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

Я думаю, что проблема заключается в том, что вы используете FileOutputStream и FileInputStream в одном файле.

Я бы порекомендовал сохранить в ByteArrayOutputStream pdf, закрыть штамп изатем сохраните ByteArrayOutputStream в вашем файле.

Я использовал IOUtils.write (данные байта [], вывод OutputStream) , чтобы сохранить ByteArrayOutputStream в 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);
0 голосов
/ 28 июня 2017

Ну, вы можете сделать что-то вроде этого.

            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();
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...