3

事前入力された PDF/XFA フォームを読み取り専用にする必要があります (テキスト、チェックボックス、ラジオ ボタンなどの入力値を変更できないため)。

通常の AcroForms PDF と静的 XFA フォームsetFormFlattening(true)の場合、PdfStamper インスタンスを呼び出すことでこれを実現できます。動的 XFA フォームの場合access、XDP のfieldノードの属性を に設定する必要がありますreadOnly

問題は、フォームが動的XFA であるかどうかをどのように検出するかです。 isXfaPresent静的または動的 XFA フォームを区別しないため、役に立ちません。

4

2 に答える 2

2

iText は、無料のビールのように自由ではなく、言論の自由のように自由です。MPL/LGPL から AGPL への切り替えを回避するために試みたビジネス モデルの詳細については、http://lowagie.com/bumodelsを参照してください。

Q1: 動的 XFA フォームを読み取り専用にする

これは iText の最新バージョンでは簡単ですが、使用している古いバージョンではサポートされていません。http://lowagie.com/itext2を読んで、iText 4.2.0 を使用すべきではない理由を確認してください (私の知る限り、公式リリースでさえありません。単一の iText リリース)。たぶん、あなたは iTextSharp について話しているのでしょう。

Q2: 動的 XFA フォームのフラット化

動的な XFA フォームをフラット化する場合は、2 つのオプションがあります。Adobe LiveCycle ES を使用するか (腕と脚の費用がかかります)、iText の XFA Worker を使用します (これは、上に構築されたはるかに安価なクローズド ソース製品です)。 F/OSS iText の)。この製品に費やされたコストと工数を考えると、無料のビールのように無料のソリューションは見つからないと思います。私はそのような製品を知りません。

Q3: XFA フォームが動的かどうかを確認する方法

これについては、私の著書「iText in Action - Second Edition」で説明しています。あなたはすでにソリューションの半分を持っています。条件 1:isXfaPresent()返す必要がありますtrue。条件 2:getFields()空のキー セットが必要です。readFieldnames()この例のメソッドを参照してください。

于 2012-10-30T17:52:33.073 に答える
2

ブルーノの回答に追加し、C# のサンプル コードを提供するには:

PdfReader reader = new PdfReader(filePath);
XfaForm xfa = new XfaForm(reader);

//Check if PDF file contains Dynamic XFA data
if (xfa != null && xfa.XfaPresent && xfa.Reader.AcroFields.Fields.Keys.Count == 0)
{
   MessageBox.Show("This PDF contains Dynamic XFA data.");
}
于 2015-02-06T22:32:51.090 に答える