2

サブフォームとテキストフィールドを持つ PDF テンプレート (Adobe Livecycle デザイナーを使用して設計) があります。これら 2 つのオブジェクトのプロパティは に設定されていfloatます。これらのオブジェクトの高さは に設定されAutofitます。これらのオブジェクトを囲むすべての親の高さは に設定されましたAutoFit

ここでの意図は、テキスト フィールドに入力するテキスト コンテンツに応じて、テキスト フィールドの高さを大きくすることです。

Adobe デザイナーからテンプレートをプレビューすると、生成されたプレビュー PDF でテキスト フィールドがフローティングとして表示されます (入力したテスト データに基づく)。

アプリケーションの目的のために、iText を使用します。

基本的に、これらの定義済みテンプレートをロードし、iText API を使用してこれらのフィールドにデータを入力します。

現在使用している iText のバージョンは iText 5.1.3 です。

...

Document document = new Document();
document.open();
PdfReader reader = new PdfReader(<inputTemplate>);
ByteArrayOutputStream aStream2 = new ByteArrayOutputStream();
PdfStamper stamper2 = new PdfStamper(reader, aStream2);
AcroFields form = stamper2.getAcroFields();
form.setField("<fieldname>", "<fieldvalue>");

... 

等々。

このようにして生成された PDF は、基本的にオーバーフローを無視して、テキスト ボックスのサイズに収まるテキストのみを表示します。

うまくいけば、私が遭遇している問題について十分な説明ができました。コンテンツを動的に埋め込み、残りの PDF をフロート可能にしたい。iTextを使用してこれを達成するにはどうすればよいのでしょうか?

4

1 に答える 1

1

さまざまなものを混ぜています。

PDF には 2 種類のフォーム テクノロジーがあります。すぐ。AcroForm テクノロジーを使用する場合、要件を満たすことはできません。間違ったテクノロジーを使用しています。通常、これらのフォームは Adob​​e Acrobat、LibreOffice などを使用して作成されます。XML Forms Architecture (XFA): フォームは XML を使用して記述されます。PDF は XML のコンテナーとして機能します。通常、これらのフォームは Adob​​e LiveCycle Designer を使用して作成されます。

フォームが両方の技術 (ハイブリッド フォーム) を使用する場合があります。この場合、フォームは PDF 構文と XML 構文を使用して定義されます。

目的を達成する唯一の方法は、純粋な動的 XFA フォームを使用することです。その場合、setField() メソッドは使用できません。代わりに、この例で行われているように、fillXfaForm() を使用する必要があります: http://itextpdf.com/examples/iia.php?id=165 または、ここでデモを見つけることができる XFA ワーカーを使用する必要があります: http://demo.itextsupport.com/xfademo/

于 2012-09-06T08:17:30.813 に答える