2016-11-01 9 views
1

私はpdfドキュメントを作成しています。まず、テーブルといくつかのテキストをPdfWriterに追加します。今私は(画像やテキストを含む)costumテンプレートを追加したい:私は、PDFWriterの層の上に層をイスト直接コンテンツを取得する必要があります。直接のコンテンツを使用して絶対位置に書き込む

over= PdfWriter.getDirectContent(); 

を私は正確にコンテンツの後にテンプレートを設定したいですPdfWriter-layer上にある。 私はPDFWriterの層上のY位置の私の計算のために

writer.getVerticalPosition(true) 

を使用することができます。 この方法で、その位置の上層にcostumテンプレートを追加できます。今、PdfWriter-layerに戻って、どうやって上層のtempalteの後にPdfWriter-layerの位置を設定できますか?

誰かが助けることができますか? ありがとうございます。

答えて

0

混合内容は、document.add()を直接添加してください。私たちは常に微妙な操作をしています。 カスタムテンプレートの高さを知り、その高さに一致する空白を追加する必要があります。しかし、カスタムテンプレートの内容がページと一致しない場合はどうしますか?

私はあなたの計画を忠告するでしょう、私は別のアプローチをお勧めします。

私はあなたのカスタムテンプレートがPdfTemplateオブジェクトであると仮定しています。その場合、このオブジェクトをImageオブジェクト内にラップし、document.add()を使用してテンプレートを追加することができます。

インスタンスを参照してください:私たちはdocument.add()で文書にこのtemplateを追加したい

PdfTemplate template = canvas.createTemplate(rect.getWidth(), rect.getHeight() + 10); 
ColumnText.showTextAligned(template, Element.ALIGN_LEFT, 
     new Phrase("DARK GRAY", regular), 0, rect.getHeight() + 2, 0); 
barcode.placeBarcode(template, BaseColor.BLACK, BaseColor.BLACK); 

ので、我々:この例ではChanging Font on PDF Rotated Text

を、私たちはバーコードやテキストでPdfTemplateを作成テンプレートをImageオブジェクト内にラップします。

Image image = Image.getInstance(template); 

これを追加できるようになりました文書に:その後

document.add(image); 

、私たちは余分なコンテンツを追加することができます。

Paragraph p3 = new Paragraph("SMALL", regular); 
p3.setAlignment(Element.ALIGN_CENTER); 
document.add(p3); 

内容が正しい位置にtemplateの下に追加されていること。 getVerticalPosition()でY位置を取得することについてもう心配する必要はなく、テンプレートを追加した後にY位置を設定することについて心配する必要はありません。テンプレートが現在のページに収まらない場合は、自動的に次のページに移動します。

重要:あなたのテンプレートの解像度が気になるかもしれません。あなたはいけません。テンプレートがベクトルデータで構成されている場合、そのデータをImageオブジェクト内にラップしてもラスターデータには変更されません。ベクタデータは保存されます。これは、バーコードの例では重要です。なぜなら、バーコードの品質をラスターイメージにすることによって悪化させたくないからです。

+0

Bruno Lowagie:ありがとうございました!あなたは私の日を救った:) – saab

関連する問題