itext7 pdf to image

时间:2016-06-14 10:08:50

标签: itext itextpdf

我正在使用iText7(java),我正在寻找一种将pdf页面转换为图像的方法。 在较旧的iText版本中,您可以这样做:

PdfImportedPage page = writer.getImportedPage(reader, 1);
Image image = Image.getInstance(page);

但iText7没有PdfImportedPage。

我的用例,我有一页pdf文件。我需要添加一个表并调整pdf内容的大小以适合单个页面。在旧的iText中,我会创建一个页面,添加表格,将现有的pdf页面转换为图像,调整图像大小并将调整后的图像添加到新页面。在iText7中有没有新的方法。

感谢Bruno的回答,我使用了以下代码:

PdfPage origPage = readerDoc.getPage(1);
Rectangle rect = origPage.getPageSize();
Document document = new Document(writerDoc);
Table wrapperTable = new Table(1);
Table containerTable = new Table(new float[]{0.5f,0.5f});
containerTable.setWidthPercent(100);
containerTable.addCell( "col1");
containerTable.addCell("col2");

PdfFormXObject pageCopy = origPage.copyAsFormXObject(writerDoc);
Image image = new Image(pageCopy);
image.setBorder(Border.NO_BORDER);
image.setAutoScale(true);
image.setHeight(rect.getHeight()-250);
wrapperTable.addCell(new Cell().add(containerTable).setBorder(Border.NO_BORDER));
wrapperTable.addCell(new Cell().add(image).setBorder(Border.NO_BORDER));
document.add(wrapperTable);
document.close();
readerDoc.close();

1 个答案:

答案 0 :(得分:8)

请阅读iText 7的官方文档,更具体地说是Chapter 6: Reusing existing PDF documents

在PDF中,有 Form XObject 的概念。 Form XObject 是一段PDF内容,存储在页面的内容流之外,因此XObject代表eXternal Object。在 Form XObject 中使用 Form 这个词可能会让人感到困惑,因为人们可能会想到一个带有字段的可填写形式的表单。为避免这种混淆,我们在iText 5中引入了术语PdfTemplate

您引用的类PdfImportedPagePdfTemplate的子类:它是一段PDF语法,可以在另一页中重用。多年来,我们注意到人们也对PdfTemplate这个词感到困惑。

在iText 7中,我们回到了基础。在谈论Form XObject时,我们使用类PdfFormXObject。在谈论PDF文件中的页面时,我们使用类PdfPage

这是我们从现有文档中获取PdfPage的方式:

PdfDocument origPdf = new PdfDocument(new PdfReader(src));
PdfPage origPage = origPdf.getPage(1);

这就是我们在新文档中使用该页面的方式:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfFormXObject pageCopy = origPage.copyAsFormXObject(pdf);

如果您想将pageCopy用作Image,只需按照以下方式创建:

Image image = new Image(pageCopy);