itext7 pdf转图像

itext7 pdf to image

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

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

但是iText7没有PdfImportedPage .

我的用例,我有一页 pdf 文件。我需要添加 table 并调整 pdf 内容的大小以适合单个页面。在旧的 iText 中,我会创建一个页面,添加 table,将现有的 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 中,有 Form XObject 的概念。 Form XObject 是一段存储在页面内容流之外的 PDF 内容,因此 XObject 代表外部对象。在 Form XObject 中使用单词 Form 可能会造成混淆,因为人们可能会将表单视为具有字段的可填写表单。为了避免混淆,我们在 iText 5 中引入了术语 PdfTemplate

您提到的 class PdfImportedPagePdfTemplate 的子 class:它是一段 PDF 语法,可以在另一个页面中重复使用。多年来,我们注意到人们也对 PdfTemplate.

这个词感到困惑

在 iText 7 中,我们回归了基础。在谈论 Form XObject 时,我们使用 class PdfFormXObject。在谈论 PDF 文件中的页面时,我们使用 class 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);