我正在使用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();发布于 2016-06-14 21:02:23
请阅读iText 7的官方文档,尤其是Chapter 6: Reusing existing PDF documents
在PDF中,有表单对象的概念。_Form对象是存储在页面内容流之外的一段PDF内容,因此XObject代表eXternal XObject。在表单XObject中使用表单这个词可能会让人感到困惑,因为人们可能会认为表单是带有字段的可填写表单。为了避免混淆,我们在iText 5中引入了术语PdfTemplate。
您引用的类是PdfTemplate的子类:它是一段PdfImportedPage语法,可以在另一个页面中重用。多年来,我们注意到人们也被PdfTemplate这个词搞糊涂了。
在iText 7中,我们回到了基础知识。在讨论表单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);https://stackoverflow.com/questions/37809019
复制相似问题