将PDF文档添加到表中

我正在使用iText 5.1.2创建报告 . 我有两个PDF文档 . 首先,我有表格,我想把第二个PDF文件的全部内容 . 每个页面都是表格中的单独单元格 .

我目前的解决方案并不总是按预期工作 . 问题是,对于某些PDF,当我将它们添加到表格时,它们的页面会旋转90度 .

这就是我现在拥有的:

//First document with table
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
Document pdfDocument = new Document(PageSize.A4, 60, 30, 120, 120);
PdfWriter pdfWriter = PdfWriter.getInstance(pdfDocument, buffer);
Rectangle pdfRectangle = pdfDocument.getPageSize();
pdfDocument.open();


PdfPTable table = new PdfPTable(1);
table.setTotalWidth(pdfRectangle.getWidth() - pdfDocument.leftMargin() - pdfDocument.rightMargin());
table.setWidthPercentage(100);
table.setSplitLate(false);

pdfDocument.add(table);

//other PDF document 
InputStream otherPdfStream = ...
PdfReader pdfReader = new PdfReader(otherPdfStream);

int numberOfPages = pdfReader.getNumberOfPages();
for (int pageNumber = 1; pageNumber <= numberOfPages; pageNumber++) {
   PdfImportedPage pdfImportedPage = pdfWriter.getImportedPage(pdfReader, pageNumber);
   Image image = Image.getInstance(pdfImportedPage);
   table.addCell(image);
}

...

pdfDocument.close();
pdfWriter.close();

我试图使用PdfCopy,但现在我只得到损坏的文件 .

ByteArrayOutputStream atiStream = new ByteArrayOutputStream();
PdfDocument atiDocument = new PdfDocument();
PdfCopy copy = new PdfCopy(atiDocument, atiStream);

...

for (int pageNumber = 1; pageNumber <= numberOfPages; pageNumber++) {
   PdfImportedPage pdfImportedPage = copy.getImportedPage(pdfReader, pageNumber);
   Image image = Image.getInstance(pdfImportedPage);
   table.addCell(image);
}

回答(1)

2 years ago

您正在描述的问题将在第二本"iText in Action"书的chapter 6中讨论 .

请参阅第6.2.1节,并查看图6.1,其中您将看到两个不同的文档,每个文档都包含一个包含导入页面的表 .

enter image description here

在其中一个PDF中,导入的页面是横向的;在另一个他们是肖像 .

有什么不同?

好吧,一个PDF创建的代码看起来或多或少像你的:ImportingPages1 . 在该代码中,您不考虑轮换 .

另一个PDF是使用ImportingPages2创建的:

PdfReader reader = new PdfReader(MovieTemplates.RESULT);
int n = reader.getNumberOfPages();
PdfImportedPage page;
PdfPTable table = new PdfPTable(2);
for (int i = 1; i <= n; i++) {
    page = writer.getImportedPage(reader, i);
    table.getDefaultCell().setRotation(-page.getRotation());
    table.addCell(Image.getInstance(page));
}
document.add(table);

在这个例子中,我们改变了单元格的旋转,更具体地说,我们将其转回,就像我们将时钟转回一样 .

Update: 作为 page.getRotation() 的替代方案,您可以使用 reader.getPageRotation(i) .