4

まず、過去に何度も助けてくれた SO コミュニティに感謝します。あなたたちは素晴らしいリソースです!

私の仕事では、Scribus で作成された PDF テンプレートと iText Java ライブラリを使用して、テンプレートにデータベースのデータを入力する Web アプリケーションに取り組んでいます。場合によっては、ユーザー指定のフィールドが必要であり、iText によって処理されないことがあります。.pdf がダウンロードされ、フィールドが編集され、コピーが Evince で保存されると、結果のファイルは、再度開いたときに編集されたテキストを表示しません。ただし、編集されたフィールドにフォーカスがあると、保存されたテキストが表示されます。フォーカスを外すと、テキストが消えます。テキストを切り取り、フィールドに貼り付けます。ドキュメントを保存して再度開くまで、表示されたままになります。保存して再度開くと、元の問題マニフェストが表示されます。この問題に関して非常によく似た投稿をたくさん見つけましたが、私にとってはうまくいくと思われる解決策はありません。

また、問題は風変わりです。Evince で Scribus テンプレート (iText によって変更されていない .pdf ファイル) を開き、フィールドを編集して保存すると、再度開いたときに正しく表示されます。ただし、ライブラリがテンプレートに触れると、問題が発生します。同様に、この問題の原因を検索中に見つけた PDF ファイルでも問題を再現できます。このように:

http://www.quask.com/samples/pdfforms/pcpurchase.pdf

これにより、動作不良のファイルが何らかの形で破損している可能性があり、iText が問題の原因である可能性があると思われますが、iText が問題を再現できる唯一の手段ではないため、何をすべきかわかりません考える。私が見た多くの中で有効な解決策を見つけることができないようです。この問題をよく知っている人で、この問題の根底に到達できる場所を教えてくれたり、使用しているツールに関する洞察を提供したりできますか? Google を使用して問題を検索すると、見たことがある可能性が高い..

私は Ubuntu 12.04 (正確)、Evince 3.4.0、iText 2.1.5 を使用しています。リクエストに応じて、その他の関連する詳細を記入することができます。コードがコーシャであるかどうかわからないため、コードを投稿するのは不安です。この特定の問題を除いて、フォームの作成には問題なく機能します。私たちのウェブアプリを使わずに問題を再現できるという事実は言うまでもありません。

これは私の最初の投稿であり、私は初心者のプログラマーです (まだ学校に通っています!) ので、慣習に違反したり、今後の質問を何らかの方法で改善できる場合はお知らせください。

ご協力いただきありがとうございます。

4

2 に答える 2

5

彼の質問へのコメントで jbowman によって提供されたファイルを調べると --- 特にパスワード フィールド (これは evince によって実際に入力されるフィールドの 1 つです) を考慮して --- 表示されます:

テンプレート.pdf

  • Scribus PDF Library 1.4.1.svn によって生成された元のフォームです。
  • 9 つのフィールドとフラグ NeedAppearances が true に設定された AcroForm が含まれています。
  • 空の値を含むパスワード フィールド (passwordField という名前)と、空のテキストで四角形を描画する通常の外観のストリームがあります。

after_itext.pdf

  • iText 2.1.5 によって編集された元のフォームです。残念ながら、分析を容易にする追加モードではありません。
  • NeedAppearances フラグのない 8 つのフィールドを持つ Acroform が含まれます (メンバー番号フィールドは入力され、平坦化されています)。
  • パスワード フィールド (passwordField:u4woYY1FK9 という名前) の値があり、外観は変更されません。

after_itext_edited.pdf

  • 以前は iText によって編集されていたフォームが、現在は他のソフトウェア (evince) によって追加モードで編集されています。
  • NeedAppearances フラグのない 8 つのフィールドを持つ Acroform が含まれています。フィールド passwordField:u4woYY1FK9 および memberPrefix:u4woYY1FK9 のみが変更されています。
  • 新しい関連付けられた値asdfを持つパスワード フィールド (passwordField:u4woYY1FK9 という名前)がありますが、その外観は変更されていません。
  • には、新しい関連付けられた値asdfを持つメンバー プレフィックス フィールド (memberPrefix:u4woYY1FK9 という名前)がありますが、その外観は変更されていません。

したがって、デフォルトで値が表示されないという観察された動作は、予想されるものです。

最終的な Acroform には NeedAppearances フラグがありません。このフラグは、仕様ISO 32000-1:2008で次のように定義されています。

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

したがって、最終的な形式の PDF ドキュメントには、次のように記載されています。

ドキュメントのパスワード フィールドの外観は元のものであり、空のテキストを含む四角形です。

この空の長方形が表示されます。

フィールドをクリックすると、PDF ビューアはその内容を編集する準備をするため、適切と思われる値を表示します。

エビデンスを使用した PDF ファイルの編集が目に見える結果をもたらすことを意図している場合、フィールドの値を変更する際のエビデンスは、更新された外観ストリームも追加するか、AcroForm NeddAppearances フラグが設定されていることを確認する必要がありますしたがって、これはエビデンスが失敗した場所です。

于 2012-11-19T10:48:50.473 に答える