2016-06-14 88 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