我正在使用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);
}
答案 0 :(得分:0)
您所描述的问题将在第二个&#34; iText in Action&#34;的chapter 6中讨论。书。
参见6.2.1节,看一下图6.1,你将看到两个不同的文件,每个文件都包含一个带有导入页面的表格。
在其中一个PDF中,导入的页面处于横向状态;在另一个他们是肖像。
有什么区别?
好吧,创建了一个PDF,其代码看起来或多或少与您的相似:ImportingPages1。在该代码中,您不会考虑轮换。
创建其他PDFPdfReader 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);
在这个例子中,我们改变了单元格的旋转,更具体地说,我们将其转回,就像我们将时钟转回一样。
更新:作为page.getRotation()
的替代方案,您可以使用reader.getPageRotation(i)
。