带复选框的Acrobat PDF计算

时间:2015-05-28 00:09:55

标签: javascript pdf checkbox

我创建了一个PDF表单来帮助创建管道工作的估算值。承包商填写的各种线路的数量,物品的成本,然后自动计算该线的价格;这很好。

但现在我想在客户检查他们是否真的希望完成这项工作的行中添加一个复选框。如果他们选中该框,则价格将显示在最终字段中,否则将显示为0.

我的领域是: QtyRow2 ItemCostRow2 CheckboxRow2 PriceRow2

我在PriceRow2字段的“计算”标签中尝试了此Javascript代码,但无论是否选中该复选框,它都会在价格字段中显示“0”。

var oFldQty = this.getField("QtyRow2");
var oFldItem = this.getField("ItemCostRow2");

if (this.getField("CheckboxRow2").isBoxChecked(0)) {
    nSubTotal = oFldQty.value * oFldItem.value;
} else {
    nSubTotal = 0;
}

event.value = nSubTotal;

我应该如何修改它才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

如果这是计算中的整个代码,那么定义nSubTotal会更安全;否则,它被定义为全局变量,并且可能表现得很奇怪。

此外,无论何时运行此计算,并且测试结果为false,nSubTotal都设置为0.这意味着,您必须定义nSubTotal,然后在处理表单时添加它。

如果你想在场上得到一个结果,就没有必要通过一个变量绕道而行;您可以在true和false路径中设置event.value。

对于单个复选框,恕我直言更容易使用其值(或其"未选中"代码原因的可移植性值)。这导致以下代码段:

Module Module1
  Sub say(ByVal sayline)
    Console.WriteLine(sayline)
  End Sub

  Sub Main()
    Dim cmd As String
    Do
        Console.Write("> ")
        cmd = Console.ReadLine()
        Try
            If cmd IsNot Nothing And cmd.Substring(0, 3).ToUpper().Equals("SAY") Then
                say(parseInput(cmd))
            End If
        Catch ex As Exception
            Console.WriteLine("message here")
        End Try
    Loop While cmd IsNot Nothing
  End Sub

  Function parseInput(ByVal cmd As String) As String
    Dim input As String = ""
    For index As Integer = 3 To cmd.Length - 1
        If Char.IsLetter(cmd) Then
            input += cmd.Substring(index, 1)
        Else
            input = input
        End If
    Next
    Return input
  End Function
End Module

那应该这样做。

但是,由于您有一个表,最佳做法是将所有计算合并到一个单独的脚本中,该脚本可以附加到隐藏的只读字段,该字段甚至不参与计算本身。这样可以更好地概述和控制计算,并防止计算顺序错误。