我正在使用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();
}
答案 0 :(得分:1)
如果您的复选框是表单字段,则使用窗口小部件注释对其进行可视化。窗口小部件注释是特定形式的注释。注释是不属于页面内容流的交互式功能。它们列在页面词典的/Annots
数组中,并且它们总是添加在页面内容之上。
在您的代码段中,我看到一个名称为AddField()
的误导方法。该名称具有误导性,因为您没有添加字段。您似乎正在向内容流添加内容。如果该内容流是页面内容流的一部分,则预期和正常该内容被小部件注释覆盖。
在我看来,您想要“选中”复选框。你为什么不填写表格呢?假设复选框字段的名称为“cb”且on值为“Yes”,那么您将使用PdfStamper
实例,创建一个AcroFields
对象(例如form
)然后做这样的事情:
form.setField("cb", "Yes");
这应该“检查”交互式复选框字段。有关完整示例,请参阅FillDataSheet示例。
重要提示:您需要知道该字段的名称(它并不总是“cb”),您需要知道外观状态复选框(它不会始终为“是”)。您应该阅读chapter 6 of my book了解更多信息。