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();
}
如果复选框是表单字段,则使用小部件注释将其可视化。小部件注释是一种特定形式的注释。注释是交互特性,它不是页面内容流的一部分。它们列在页面字典的/Annots
数组中,并且它们总是添加在页面内容的顶部。
在您的代码片段中,我看到一个具有误导性名称AddField()
的方法。这个名字很容易误导,因为你没有添加字段。你似乎在向内容流中添加内容。如果该内容流是页面内容流的一部分,那么和正常该内容将被小部件注释覆盖。
在我看来,你想要"选中"复选框。你为什么不填一下这张表呢?假设复选框字段的名称为"cb",on值为"Yes",那么您将使用PdfStamper
实例,创建AcroFields
对象(例如form
),然后执行如下操作:
form.setField("cb", "Yes");
这应该"检查"交互式复选框字段。完整的示例请参见FillDataSheet示例。
重要:您需要知道字段的名称(它不会总是"cb"),并且您需要知道复选框的外观状态(它不会总是"Yes")。