如何将 PDFDocument 的一页复制到另一个 PDFDocument
How to copy one page of a PDFDocument , to another PDFDocument
我对 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: Page com.itextpdf.kernel.pdf.PdfPage@6576eb4b cannot be added to document com.itextpdf.kernel.pdf.PdfDocument@286ef136, because it belongs to document com.itextpdf.kernel.pdf.PdfDocument@2c74aa66.
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);
我对 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: Page com.itextpdf.kernel.pdf.PdfPage@6576eb4b cannot be added to document com.itextpdf.kernel.pdf.PdfDocument@286ef136, because it belongs to document com.itextpdf.kernel.pdf.PdfDocument@2c74aa66.
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);