0

PDFフォームがあり、iTextとJavaを使用してコードを介してPDFフィールドにデータを書き込んでいます。pdf フィールドの有効な入力を知るために、フィールドのカスタム フォーマット スクリプトを取得したいと考えています。ありがとう

4

1 に答える 1

1

アップデート:

おっと、私はあなたの質問を誤解しました。ユーザーが有効なデータを追加できるように、JavaScript を既存の PDF に追加する必要があると想定しました。

あなたが探しているのは、既存の PDF から JavaScript を抽出する方法です。以前の回答で言及した回答で、その方法についてすでに印象を受けています。特定のフィールドに JavaScript を追加するには、追加のアクションを調べる必要があります。

AcroFields form = stamper.getAcroFields();
AcroFields.Item fd = form.getFieldItem("married");
// Get the PDF dictionary of the YES radio button and add an additional action
PdfDictionary dictYes =
    (PdfDictionary) PdfReader.getPdfObject(fd.getWidgetRef(0));
PdfDictionary yesAction = dictYes.getAsDict(PdfName.AA);
if (yesAction == null) yesAction = new PdfDictionary();
yesAction.put(new PdfName("Fo"),
        PdfAction.javaScript("setReadOnly(false);", stamper.getWriter()));
dictYes.put(PdfName.AA, yesAction);
// Get the PDF dictionary of the NO radio button and add an additional action
PdfDictionary dictNo =
    (PdfDictionary) PdfReader.getPdfObject(fd.getWidgetRef(1));
PdfDictionary noAction = dictNo.getAsDict(PdfName.AA);

null でない場合noActionは、その辞書のさまざまな値を調べる必要があります。例:エントリ (存在する場合) はblur/Blでトリガーされるアクションを提供し、エントリ (存在する場合) はfocusでトリガーされるアクションを提供します。/Fo

ドキュメント レベルの JavaScript を取得する場合は、PDF ドキュメントのカタログの名前ツリーから適切なエントリを取得する必要があります。言葉で説明するのは難しいですが、RUPSをダウンロードして PDF を調べると、さまざまな JavaScript スニペットを見つけることができるはずです。私の間違った回答 (以下を参照) を使用して作成されたファイルを見ると、次のようになります。

RUPS で表示される JavaScript

これは、次のようなものが必要であることを示しています。

PdfDictionary catalog = reader.getCatalog();
PdfDictionary names = catalog.getAsDict(PdfName.NAMES);
PdfDictionary javascript = names.getAsDict(PdfName.JAVASCRIPT);

このjavascriptディクショナリがあれば、すべての Javascript スニペットを抽出できます。

間違った答え:

JavaScript (より正確には ECMAScript) の書き方を知っていることを前提としています。PDF の JavaScript は、HTML の JavaScript と非常によく似ています。入力が有効かどうかをチェックするための JavaScript メソッドを書くのに助けは必要ないと思います。

その場合、JavaScript を既存の PDF ファイルに追加する方法を知っていれば十分です。例: form_without_js.pdfという名前のこの PDF ファイルに、extra.jsなどの javascript を追加します。extra.jsには、フィールドを読み取り専用に設定するメソッドと、フィールドを検証するメソッドがあります。 の値が で、 の値marriedyesない場合partner、アラートが表示されます。提出した。フォームの性質と確認するフィールドに応じて、同様の JavaScript を記述する必要があります。

AddJavaScriptToFormの例は、これらの JavaScript メソッドを既存の PDF に追加して、ファイルform_with_js.pdfを作成する方法を示しています。

これは と で行われPdfReaderますPdfStamper:

PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
// do stuff
stamper.close();
reader.close();

と書かれている場合// do stuff、次の 2 つのことを行う必要があります。

[1.] 次のような JavaScript スニペットを追加する必要があります。

PdfWriter writer = stamper.getWriter();
writer.addJavaScript(Utilities.readFileToString(RESOURCE));

[2.] 追加したカスタム メソッドを呼び出すには、特定のフィールドに JavaScript を追加する必要があります。この例では、追加アクションとして JavaScript を追加するケースを示しています。また、特定のアクションを持つ新しいボタンを追加する方法もわかります。特定のケースで必要なものを決定するのはあなた次第です。

追加の更新:私は質問に反対票を投じませんでした:

ここに画像の説明を入力

この質問に反対票を投じた場合、下向き矢印はオレンジ色になります;-)

于 2014-04-02T13:31:37.197 に答える