我正在使用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 回答
您正在描述的问题将在第二本"iText in Action"书的chapter 6中讨论 .
请参阅第6.2.1节,并查看图6.1,其中您将看到两个不同的文档,每个文档都包含一个包含导入页面的表 .
在其中一个PDF中,导入的页面是横向的;在另一个他们是肖像 .
有什么不同?
好吧,一个PDF创建的代码看起来或多或少像你的:ImportingPages1 . 在该代码中,您不考虑轮换 .
另一个PDF是使用ImportingPages2创建的:
在这个例子中,我们改变了单元格的旋转,更具体地说,我们将其转回,就像我们将时钟转回一样 .
Update: 作为
page.getRotation()
的替代方案,您可以使用reader.getPageRotation(i)
.