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 PdfImportedPage
是 PdfTemplate
的子 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);
我正在使用 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 PdfImportedPage
是 PdfTemplate
的子 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);