PdfContentByte不会覆盖复选框

本文关键字:复选框 覆盖 PdfContentByte | 更新日期: 2023-09-27 18:10:24

我正在使用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();
}

PdfContentByte不会覆盖复选框

如果复选框是表单字段,则使用小部件注释将其可视化。小部件注释是一种特定形式的注释。注释是交互特性,它不是页面内容流的一部分。它们列在页面字典的/Annots数组中,并且它们总是添加在页面内容的顶部。

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

在我看来,你想要"选中"复选框。你为什么不填一下这张表呢?假设复选框字段的名称为"cb",on值为"Yes",那么您将使用PdfStamper实例,创建AcroFields对象(例如form),然后执行如下操作:

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

这应该"检查"交互式复选框字段。完整的示例请参见FillDataSheet示例。

重要:您需要知道字段的名称(它不会总是"cb"),并且您需要知道复选框的外观状态(它不会总是"Yes")。