2

PDF Clownの Java バージョンを使用して、PDF Acroforms のフィールドに入力します。これはうまく機能し、プログラムでフォームに入力して問題なく保存できます。

ただし、一部の PDF ビューアでは、入力しているフィールドの一部のテキストが表示されないことがあります。クリックしない限り、テキストは表示されます。このフォーラムの投稿では、これは一般にフォーム入力可能な PDF で発生する可能性があり、GUI で既に背景色が「なし」と表示されていても、PDF フィールドの背景色を「なし」に設定することで修正できることが説明されています。これは他の人にも効果があったので、自分で試してみたいと思います。

残念ながら、PDFClown で実際にこれを行う方法に行き詰まっています。Fieldfield.setBackgroundColor(null)クラスのような直接的な方法はなく、他のアクセサ メソッドのいずれかを使用してそれを行う方法を見つけることができません。のようにgetDefaultAppearanceState()

PDF Clownでこれを行う方法を知っている人はいますか?

編集: この問題のサンプル PDF は、こちらにあります。この PDF のすべてが PDF Clown で埋められています。特に、左上の 2 つのフィールド (「名前」のラベルが付いている) は、クリックするまで表示されないことに注意してください。右側の 5 つのフィールドも、クリックするまで見えません。ただし、以前は見えなかった「カリスマ」フィールドを除きますが、手動で値を入力すると、表示されるようになりました。他のすべては PDF Clown によって入力されましたが、他のフィールドとは異なり、表示されました。

編集 2: これは、既存のフォーム入力可能な文字シートの値を上書きした場合にのみ発生することが発見されました。オリジナルはこちらからダウンロードできます。

4

2 に答える 2

1

最初の分析として:

私の元のコメントで疑われるのとほぼ同じように、フィールド "Name Line 1" には値 (フィールド ディクショナリV ) "Doc Lightning" が含まれていますが、テキストを表示しない通常の外観ストリーム (フィールド ディクショナリAP -> 外観ディクショナリ、キーN ) が含まれています。

さらに、インタラクティブ フォーム ディクショナリ エントリNeedAppearancesが に設定されていませんtrue。したがって、PDF ビューアは、外観ストリームが最新であると認識します。フィールドをクリックして編集することを通知した場合にのみ、PDF ビューアーはストリームの新しい外観を生成します。これは、編集タスクを完全に理解する独自の外観です。

そのフォーム フィールドに入力した後、他のツールで結果が変更されなかった場合は、コードまたは PDF Clown に問題があります。問題を再現するために、自己完結型のサンプル コードと未記入のドキュメントを提供してください。

編集:

現在の (トランク) PDF ClownAcroFormFillingSample.javaサンプルをまだ入力されていない文字シート (つまり、ファイルの最初の 1458834 バイトで構成されるリビジョン) に適用したところ、結果は問題ありません。それらをクリックします。したがって、あなたのソースには何か特別なものがあります... (または、古いバージョンを使用していますか?)

詳細に:

Doc Lightningのキャラクター シートの 1 ページ目は、オブジェクト 162 の注釈を参照しています。

/MK      <<>>
/F       4
/Type    /Annot
/Subtype /Widget
/Rect    [37.0108, 617.055, 156.923, 631.717]
/FT      /Tx
/DA      /Helv 12 Tf 0 g
/T       (Name Line 1)
/V       (Doc Lightning)
/P       47 0 R
/AP      537 0 R

したがって、フィールドの値は実際には「Doc Lightning」です。

一方、オブジェクト 537 の外観ディクショナリは、通常の外観ストリームを参照します。

/N       538 0 R

また、オブジェクト 538 のストリームには以下のみが含まれます。

/Tx BMC
q
1 0 0 1 2 -7.331 cm
/Helv 12 Tf
Q
EMC

したがって、通常の外観ストリームはフィールド内に位置し (それに応じて現在の変換マトリックスを設定します)、フォント (リソースで適切に定義された Helvetica、BTW) を選択し、印刷します...何もありません!

インタラクティブ フォーム ディクショナリ (オブジェクト 144)には、 NeedAppearancesエントリがまったく含まれていません。PDF 仕様ISO 32000-1:2008、表 218 によると、このエントリは

ドキュメント内のすべてのウィジェット注釈に対して外観ストリームと外観辞書を作成するかどうかを指定するフラグ (12.7.3.3「可変テキスト」を参照)。デフォルト値: false

したがって、PDF ビューアーは、"Name Line 1" の値 "Doc Lightning" を表示せず、代わりに空の外観ストリームを表示する場合に、期待どおりに動作します。

于 2013-04-23T08:06:30.587 に答える
0

この問題を再確認し、ソース コードを注意深く調べたところ、Sample.javaPDFClown のサンプルのクラスにはapplyDocumentSettings()、ソースから欠落している 3 行のコードを含むメソッドがあることに気付きました。

//Previously we instantiated "document" from org.pdfclown.files.File.getDocument()
ViewerPreferences view = new ViewerPreferences(document); // Instantiates viewer preferences inside the document context.
document.setViewerPreferences(view); // Assigns the viewer preferences object to the viewer preferences function.
view.setDisplayDocTitle(true);

最後の行が実際に必要かどうかはわかりませんが、とりあえずそのままにしておきました。

ユーザー mkl は、「PDF ビューアーは、ストリームの新しい外観を生成します。編集タスクを完全に理解する独自の外観を生成します。」上記のコード行が行っていることは、読み取り用 (およびおそらく編集用?) であると理解される外観を生成しているようです。

于 2013-07-31T06:54:13.293 に答える