2014-06-26 30 views
0

我正在使用pdfContentByte将内容添加到现有的PDF中。原来在Word中创建的现有PDF文档有几个复选框。在适当的时候,我需要在复选框上覆盖一个'X'。我能做些什么来使'X'覆盖复选框。用下面的代码将'X'放在复选框下。PdfContentByte不会覆盖复选框

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

在你的标题中,你的意思是_Override_或_Overwrite_? –

回答

1

如果您的复选框是表单域,那么它使用小部件注释进行可视化。小部件注释是一种特定的注释形式。注释是交互式功能,不属于页面内容流的一部分。它们列在页面字典的/Annots数组中,并且它们始终添加在页面内容的顶部。

在您的代码片段中,我看到一个误导性名称为AddField()的方法。这个名字是误导性的,因为你不添加一个字段。您似乎正在将内容添加到内容流中。如果该内容流是页面的内容流的一部分,则其预计为正常该内容由小部件注释覆盖。

在我看来,你想“检查”复选框。为什么你不填写表格?假设复选框字段的名称为“CB”和价值“是”,那么你会使用一个PdfStamper例如,创建一个AcroFields对象(例如form),然后做这样的事情:

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

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

重要:您需要了解该领域的(它不会永远是“CB”),你需要知道外观状态的复选框的(它不会永远是“是”)。您应该阅读chapter 6 of my book了解更多信息。