Как скопировать одну страницу PDFDocument, в другой PDFDocument - PullRequest
1 голос
/ 28 марта 2019

У меня есть сомнения по поводу PDFDocuments. Как я могу скопировать определенную страницу объекта PdfDocument в другой объект PdfDocument.

Я пробовал с методом moveTo, но он не работал, также я пробовал с методом copyPagesTo, но я выбрасываю Запрошенную страницу за пределами границ (когда я пытаюсь скопировать, например, только одну страницу из 1 до 1).

Любой намек?

List<PdfDocument> pdfDocuments = new ArrayList<>();   
PdfDocument pdfWithMultiplePages = here I have a PDF with 3 pages.
for (int i = 0 ; i<pdfWithMultiplePages.getNumberOfPages() ; i++){
    final ByteArrayOutputStream byteArrayOutputStream = new 
    ByteArrayOutputStream();
    final PdfWriter pdfWriter = new PdfWriter(byteArrayOutputStream);    
    PdfDocument pdfDocument = new PdfDocument(pdfWriter);
    pdfDocument.copyPagesTo(i+1, i+1,pdfWithMultiplePages);
    pdfWriter.close();
    byteArrayOutputStream.close();
    shippingLabels.add(shippingLabelSplitted);
}

Я пробовал также с этим:

List<PdfDocument> pdfDocuments = new ArrayList<>();   
PdfDocument pdfWithMultiplePages = here I have a PDF with 3 pages.
for (int i = 0 ; i<pdfWithMultiplePages.getNumberOfPages() ; i++){
    final ByteArrayOutputStream byteArrayOutputStream = new 
    ByteArrayOutputStream();
    final PdfWriter pdfWriter = new PdfWriter(byteArrayOutputStream);    
    PdfDocument pdfDocument = new PdfDocument(pdfWriter);
    pdfDocument.addPage(1,pdfWithMultiplePages.getPage(i+1));
    pdfWriter.close();
    byteArrayOutputStream.close();
    shippingLabels.add(shippingLabelSplitted);
}

Но это бросает:

com.itextpdf.kernel.PdfException: Страница com.itextpdf.kernel.pdf.PdfPage@6576eb4b не может быть добавлена ​​в документ com.itextpdf.kernel.pdf.PdfDocument@286ef136, поскольку она принадлежит документу com.itextpdf.kernel .pdf.PdfDocument @ 2c74aa66.

1 Ответ

1 голос
/ 28 марта 2019

Страница в PDF имеет много связей с другими объектами в PDF.

Если бы вы могли добавить страницу, расположенную в одном документе, в другой, эта страница находилась бы в обоих документах.Таким образом, страница внезапно должна будет иметь все эти отношения к объектам в обоих документах.Это, очевидно, не работает, поэтому iText предотвращает это.

Вместо этого вам нужно создать копию рассматриваемой страницы (страниц), для которой отношения переключаются на документы в целевом документе.

Для этой задачи существует несколько перегрузок метода PdfDocument.copyPagesTo.Таким образом, эти методы действительно используются.

К сожалению, вы ошиблись в источнике и цели операции:

PdfDocument pdfWithMultiplePages = here I have a PDF with 3 pages.
....
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
pdfDocument.copyPagesTo(i+1, i+1,pdfWithMultiplePages);

При попытке скопировать страницу i+1 из pdfDocument в pdfWithMultiplePages.Но вы только что создали pdfDocument с нуля, поэтому у него еще нет страниц.То, что вы, скорее всего, хотите, это:

pdfWithMultiplePages.copyPagesTo(i+1, i+1, pdfDocument);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...