0

iText で JavaScript を使用して 2 つのフィールドの違いを見つけたいと思います。

以下のコードを使用して、それらの合計を見つけることができます。

  PdfStamper stamperResult = new PdfStamper(readersectionResult, new FileOutputStream(RESULT_NEW));

   stamperResult .addJavaScript("var nameField = this.getField(\"total\");"+ "nameField.setAction(\"Calculate\",'AFSimple_Calculate(\"SUM\",\"total1\",  \"total2\")')");

上記のコード スニペットで行ったのと同様に、「AFSimple_Calculate」を使用して違いを見つける方法はありますか?

編集ありがとう!あなたの提案を試しましたが、何らかの理由でうまくいかないようです。

stamperResult.addJavaScript(" var total1 = this.getField(\"value1\"); var total2 = this.getField      (\"value2\"); var subtr = this.getField(\"total\"); subtr.value = total1.value - total2.value;");                         

改行をスペースで区切り、右エスケープ文字を追加しました。

AFメソッドを使用した減算に別のロジックを使用することも考えていました:このように

stamperResult.addJavaScript("var nameField = this.getField(\"total\");"+ "nameField.setAction(\"Calculate\",'AFSimple_Calculate(\"SUM\",\"total1\",  \"-total2\")')"); 

上記のコードでは、合計 2 に -(負の値) を追加しようとしていたため、AF メソッドはまだ「SUM」ですが、合計 1 から減算されます。

しかし、それはうまくいきません。

以下の簡単なコードはうまくいくようです:

stamperResult.addJavaScript("var nameField = this.getField('total');" +
        "nameField.setAction('Calculate'," +
        "'subtract()');" +
        "" +"function subtract(){this.getField('total').value        
                            = (this.getField('total_1').value -this.getField('total_2').value); }");
4

1 に答える 1

0

スペルミスが多かったため、質問を更新しました。元のコード スニペットがどのようなものか分からないため、コード スニペットは編集しませんでした。いずれにせよ、コード スニペットが現在の状態でコンパイルされるとは思わないため、コピー/貼り付けプロセス中に何か問題が発生したと思います。

いずれにせよ、私の知る限り、AF メソッド (AF は Adob​​e Forms の略) がすべてのビューアーに存在するわけではありません。 AFSimple_Calculate メソッド。

これら 2 つの理由から、事前に缶詰にされているかどうかに関係なく、事前に缶詰にされている関数を使用する代わりに、通常の JavaScript を使用することをお勧めします。

この通常の JavaScript は次のようになります。

var total1 = this.getField("total1");
var total2 = this.getField("total2");
var subtr = this.getField("difference");
subtr.value = total1.value - total2.value;

それがあなたの質問に答えているかどうかはわかりません。多分あなたはただ欲しい:

var total1 = this.getField("total1");
var total2 = this.getField("total2");
var namefield = total1.value - total2.value;

正しいエスケープ文字を使用してこれらの行を文字列内に配置し、改行をスペースまたは改行文字に置き換えることができます。

もちろん、このコードをどこかでトリガーする必要があります。value1以下に、フィールドのコンテンツの負の値をフィールドに入れる例を示しますvalue2

   public static void main(String[] args) throws IOException, DocumentException {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("js.pdf"));
        document.open();
        writer.addJavaScript("function makeNegative() { this.getField('value2').value = -(this.getField('value1').value); } ");
        Rectangle rect1 = new Rectangle(40, 740, 200, 756);
        TextField value = new TextField(writer, rect1, "value1");
        value.setBorderColor(GrayColor.GRAYBLACK);
        value.setBorderWidth(0.5f);
        PdfFormField field = value.getTextField();
        field.setAdditionalActions(PdfName.BL, PdfAction.javaScript("makeNegative();", writer));
        writer.addAnnotation(field);
        Rectangle rect2 = new Rectangle(40, 710, 200, 726);
        TextField neg = new TextField(writer, rect2, "value2");
        neg.setBorderColor(GrayColor.GRAYBLACK);
        neg.setBorderWidth(0.5f);
        writer.addAnnotation(neg.getTextField());
        document.close();
   }

ぼかしアクションを使用したことに注意してください。これは、フィールドに入力した後、別のフィールドを選択するとすぐにメソッドがトリガーされることを意味しvalue1ます。

于 2013-05-29T10:24:23.323 に答える