PdfContentByte不会覆盖复选框

时间:2014-06-26 09:25:53

标签: c# itextsharp

我正在使用pdfContentByte向现有PDF添加内容。最初在word中创建的现有PDF文档有几个复选框。我需要在适当的时候在复选框上叠加“X”。我该怎么做才能使'X'覆盖复选框。使用下面的代码,“X”位于复选框下。

  private static void AddField(float xpos, float ypos, string Text, PdfImportedPage page, PdfContentByte cb2, BaseFont f_cn2)
{
  cb2.AddTemplate(page, 0, 0);
  cb2.BeginText();
  cb2.SetFontAndSize(f_cn2, 10);
  cb2.ShowTextAligned(Element.ALIGN_LEFT, Text, xpos, ypos, 0F);
  //cb2.SetTextMatrix(xpos, ypos);  //(xPos, yPos)
  //cb2.ShowText(Text);
  cb2.EndText();
}

1 个答案:

答案 0 :(得分:1)

如果您的复选框是表单字段,则使用窗口小部件注释对其进行可视化。窗口小部件注释是特定形式的注释。注释是不属于页面内容流的交互式功能。它们列在页面词典的/Annots数组中,并且它们总是添加在页面内容之上。

在您的代码段中,我看到一个名称为AddField()的误导方法。该名称具有误导性,因为您没有添加字段。您似乎正在向内容流添加内容。如果该内容流是页面内容流的一部分,则预期正常该内容被小部件注释覆盖。

在我看来,您想要“选中”复选框。你为什么不填写表格呢?假设复选框字段的名称为“cb”且on值为“Yes”,那么您将使用PdfStamper实例,创建一个AcroFields对象(例如form )然后做这样的事情:

form.setField("cb", "Yes");

这应该“检查”交互式复选框字段。有关完整示例,请参阅FillDataSheet示例。

重要提示:您需要知道该字段的名称(它并不总是“cb”),您需要知道外观状态复选框(它不会始终为“是”)。您应该阅读chapter 6 of my book了解更多信息。