将PDF文档添加到表中

时间:2017-06-22 07:09:18

标签: java pdf itext

我正在使用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 个答案:

答案 0 :(得分:0)

您所描述的问题将在第二个&#34; iText in Action&#34;的chapter 6中讨论。书。

参见6.2.1节,看一下图6.1,你将看到两个不同的文件,每个文件都包含一个带有导入页面的表格。

enter image description here

在其中一个PDF中,导入的页面处于横向状态;在另一个他们是肖像。

有什么区别?

好吧,创建了一个PDF,其代码看起来或多或少与您的相似:ImportingPages1。在该代码中,您不会考虑轮换。

使用ImportingPages2

创建其他PDF
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);

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

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