Как объединить документы и создать титульный лист

#itext

#itext

Вопрос:

У меня более 200 документов PDF. Я хочу объединить все эти документы и добавить изображение на все страницы. Я также хочу создать титульный лист для объединенного PDF.

Комментарии:

1. Вы манипулируете существующим документом или создаете PDF-файл с нуля? Также: вам нужно приложить больше усилий к вашему вопросу: что вы имеете в виду, когда говорите «редактировать первую страницу»? Вы хотите что-то добавить? Вы хотите что-то изменить? Я проголосую за то, чтобы закрыть вопрос как «Непонятно, о чем спрашивают», если вы не уточните.

2. В have 200 pdf я хочу объединить все PDF-файлы и на всех страницах, которые мне нужны, добавить изображение. после объединения всех PDF-файлов я хочу создать титульный лист для объединенного PDF-файла.

Ответ №1:

Пожалуйста, взгляните на пример MergeWithToc2.

В этом примере мы используем PdfCopy для объединения документов страницу за страницей. В упрощенном виде этот код выглядит следующим образом:

 Document document = new Document();
PdfCopy copy = new PdfCopy(document, baos);
document.open();
PdfImportedPage page;
for (Map.Entry<String, PdfReader> entry : filesToMerge.entrySet()) {
    page = copy.getImportedPage(entry.getValue(),   i);
    copy.addPage(page);
}
document.close();
  

Поскольку вы хотите изменить содержимое каждой страницы, вам также необходимо создать PageStamp объект:

 PageStamp stamp;
for ( ... ) {
     stamp = copy.createPageStamp(page);
     // do stuff with stamp.getUnderContent() or stamp.getOverContent();
     stamp.alterContents();
}
  

Поскольку вы хотите добавить Image , я бы использовал stamp.getOverContent().addImage(img, x, y) .

Как вы можете видеть, мы также добавляем страницу с оглавлением (занимает 1 страницу) в конце. Мы хотим, чтобы эта страница была первой, поэтому мы переставляем страницы следующим образом:

 reader = new PdfReader(baos.toByteArray());
n = reader.getNumberOfPages();
reader.selectPages(String.format("%d, 1-%d", n, n-1));
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(filename));
stamper.close();
  

Пример MergeWithToc2 прекрасно объединяет эти разные части в один пример. Есть и другие варианты. Вы могли бы, например, создать титульную страницу в совершенно отдельном документе, а затем впоследствии объединить сопроводительную заметку и объединенный документ.