我正在使用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();
答案 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
。
您引用的类PdfImportedPage
是PdfTemplate
的子类:它是一段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);