2012-10-22 47 views
4

我想讀取一個PDF並將其數據複製到另一個PDF中。第一個PDF包含一些文本和圖像,並且我希望在第二個PDF中準確地在文本結束處(基本上是PDF文件的末尾)寫入一個圖像。現在它只是在頂部打印。我怎樣才能做出這個改變?iText中的圖像定位 - Java

PdfReader reader = null; 
reader = new PdfReader(Var.input); 
Document document=new Document(); 
PdfWriter writer = null; 
writer = PdfWriter.getInstance(document,new FileOutputStream(Var.output)); 
PdfImportedPage page = writer.getImportedPage(reader, 1); 
reader.close(); 
document.open(); 
PdfContentByte cb = writer.getDirectContent(); 
// Copy first page of existing PDF into output PDF 
document.newPage(); 
cb.addTemplate(page, 0, 0); 

// Add your new data/text here 
Image image = null; 
image = Image.getInstance (Var.qr); 
document.add(image); 
document.close(); 

回答

2

您應該使用的,而不是用進口頁面PdfWriter一個PdfStamper。你的方法拋棄了所有的互動內容。你也可以在那裏使用sorifiend的想法。

要確定給定頁面上文本的結束位置,請查看iText in Action,第2版示例ShowTextMargins,該文件解析PDF並展示顯示文本邊距的矩形。

+0

謝謝。它的確如我所想。 :)但是,有沒有什麼辦法可以將文本與座標一起使用PDF壓模? –

+0

是的,你可以。我將不得不查看,雖然...我的用例不包括向現有文檔添加文本。 – mkl

+0

我不得不添加一組圖像和文字,結果很容易,但文字有點難以操作。一些幫助將不勝感激:) –

6

試試這個:

首先獲得該圖像需要去,然後簡單地從下面添加第二個行代碼,以便插入圖像在該位置的位置/ CO-ORDS「 X,Y」

Image image = Image.getInstance(String RESOURCE); 
image.setAbsolutePosition(X, Y); 
writer.getDirectContent().addImage(image); 

看一看這裏工作的例子:http://itextpdf.com/examples/iia.php?id=70

+0

哦,這太好了。但是有什麼辦法可以確定X和Y是文本結束的地方嗎?或者在最後一頁的底部中心? –

+0

我知道有幾種方法可以做到這一點,但從代碼看起來像mkl的文本邊距建議將是獲取X和Y的最簡單方法。另一種需要更多工作的方法是讀取和寫入部件從原始的PDF文件一張一張地計算X和Y的位置,但速度較慢,但​​這種方式可以確切知道圖像可以放在哪裏,並且可以在文本中和文本週圍添加圖像。 – sorifiend

+0

其實Anurag可能不得不稍微改變我指出的樣本。它找到所有文本的邊距。這與他所說的相對應,但如果他的pdf包含頁腳,那麼該示例也會將其視爲文本的一部分。因此他必須修改代碼來考慮腳註。 – mkl