2012-02-17 91 views
7

我可以插入現有的PDF文檔中的圖像,但問題是,如何使用PDFBox精確定位現有PDF頁面中的圖像?

  1. 圖像被放置在頁面的底部,並
  2. 頁面變成白色與新添加的文本顯示它。

我正在使用以下代碼。

List<PDPage> pages = pdDoc.getDocumentCatalog().getAllPages(); 

if(pages.size()>0){ 

PDJpeg img = new PDJpeg(pdDoc, in); 
PDPageContentStream stream = new PDPageContentStream(pdDoc, pages.get(0)); 
stream.drawImage(img, 60, 60); 
stream.close(); 
} 

我希望在第一頁上的圖像。

回答

8

PDFBox是一個使用PDF文件的底層庫。您需要負責更多高級功能。因此,在本例中,您將圖像從文檔的左下角開始放置在(60, 60)處。這就是stream.drawImage(img, 60, 60);所做的。

如果您想將圖片移動到其他地方,您必須計算並提供想要的位置(可能從page.findCropBox()獲得的尺寸或手動輸入您的位置)。

至於文字,PDF文檔元素是絕對定位的。沒有用於重新流動文本,浮動或類似的低級功能。如果您將文字寫在圖像頂部,則將會寫在您的圖像上方

最後,爲了讓您的頁面變白 - 您正在創建一個新的內容流,並覆蓋原來的頁面。您應該附加到已經可用的流。

相關線上:

PDPageContentStream stream = new PDPageContentStream(pdDoc, pages.get(0)); 

你應該做的是這樣調用它:

PDPageContentStream stream = new PDPageContentStream(pdDoc, pages.get(0), true, true); 

第一true是是否追加內容,並最終true(不這裏至關重要)是是否壓縮這個流。

看看AddImageToPDF樣本可從PDFBox sources

1

試試這個

doc = PDDocument.load(inputFileName); 
PDXObjectImage ximage = null; 
ximage = new PDJpeg(doc, new FileInputStream(image) 
PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get(0); 
PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true); 
contentStream.drawImage(ximage, 425, 675); 
contentStream.close(); 

打印在第一頁的圖像。如果你想在所有頁面上打印,只需要以頁數作爲限制條件放置一個for循環。 這對我很好!

0

link給你詳細介紹有關類PrintImageLocations。 這個PrintImageLocations會給你圖像的x和y座標。

用法:java org.apache.pdfbox.examples.util.PrintImageLocations input-pdf

相關問題