2012-02-17 23 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), true, true); 

最初trueコンテンツを追加するかどうか、そして最終true(ない:

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

あなたは何をすべきこのようにそれを呼び出すことですここで批判的です)はになるかどうかはストリームです。

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

関連する問題