iTextSharp +如何处理vb.net中的表单按钮字段单击事件

时间:2011-04-27 15:39:21

标签: pdf button field itextsharp

我有一个带有按钮字段的可编辑pdf。我正在使用iTextsharp在我的vb.net应用程序中处理这个可编辑的pdf。如何知道如何捕获和处理pdf中按钮字段的Click事件。 ** Sample Document can be found here 虽然,我正在使用iTextSharp DLL,我找不到任何有用的资源来处理按钮事件。 请指导如何使用vb.net以编程方式处理此类pdf。

1 个答案:

答案 0 :(得分:1)

您需要将PdfAction附加到字段的“鼠标悬停”附加操作字典。

向现有字段添加操作比从头开始添加操作要困难一些,但仍然很有可能。

(Appologies,但我根本不知道vb.net,你必须从Java翻译)

// Create your action.
// There are quite a few static functions in PdfAction to choose from.
PdfAction buttonAction = PdfAction.javaScript(writer, scriptStr);

AcroFields.Item buttonItem = myAcroFields.getFieldItem(buttonFldName);

// "AA" stands for "additional actions"
PdfDictionary aaDict = buttomItem.getMerged(0).getAsDict(PdfName.AA);
if (aaDict == null) {
  aaDict = new PdfDictionary();
} else { // this button already has an AA dictionary.
  // if there's an existing up action, preserve it, but run ours first.
  PdfDictionary upAction = aaDict.getAsDict(PdfName.U);
  if (upAction != null) {
    PdfIndirectReference ref = aaDict.getAsIndirect(PdfName.U);
    if (ref != null) {
      buttonAction.put(PdfName.NEXT, ref);
    } else {
      buttonAction.put(PdfName.NEXT, upAction);
    }
  }
}

aaDict.put(PdfName.U, buttonAction);

int writeFlags = AcroFields.Item.WRITE_WIDGET | AcroFields.Item.WRITE_MERGED;
buttomItem.writeToAll(PdfName.AA, aaDict, writeFlags);

在您的特定情况下,您可能只需:

PdfDictionary aaDict = new PdfDictionary();
aaDict.put(PdfName.U, buttonAction);
item.getWidget(0).put(PdfName.AA, aaDict);

这将消除任何现有的操作。这可能对你没问题,可能非常糟糕。