我正在使用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();

最佳答案

请阅读iText 7的官方文档,尤其是Chapter 6: Reusing existing PDF documents

在PDF中,存在表单XObjects的概念。表单XObject是一段PDF内容,存储在页面的内容流之外,因此XObject代表eXternal Object。在表单XObject中使用“表单”一词可能会造成混淆,因为人们可能认为表单是带有字段的可填充表单。为避免这种混淆,我们在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);

关于itext7 pdf转换为图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37809019/

10-08 21:37