2016-06-14 266 views
0

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

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

但iText7没有PdfImportedPage。

我的用例,我有一个页面的pdf文件。我需要添加一个表格并调整pdf内容的大小以适合单个页面。在旧的iText中,我将创建一个页面,添加表格,将现有的PDF页面转换为图像,调整图像大小并将调整后的图像添加到新页面。有没有在iText7中做到这一点的新方法。

感谢布鲁诺的答案,我得到了与下面的代码这方面的工作:

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(); 

回答

2

请阅读iText的7官方文档,更具体Chapter 6: Reusing existing PDF documents

在PDF,有表单x对象的概念秒。 A 表单XObject是存储在页面内容流之外的一段PDF内容,因此XObject代表外部对象。使用单词表单XObject可能会引起混淆,因为人们可能会想到一个表单,就像一个带有字段的可填写表单。为避免混淆,我们在iText 5中引入了术语PdfTemplate

您引用的类PdfImportedPagePdfTemplate的子类:它是一段PDF语法,可以在其他页面中重用。多年来,我们注意到人们也对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); 
+0

非常感谢所有人信息。 – jkb016