之前曾问过这个问题(iTextSharp 5.5.6.0 Bug? check box tick mark changes),但没有提供答案,我无法发表评论,因为我是新用户。我有完全相同的问题。
我有一个现有的PDF,我正在以编程方式填写(C#)。
表格上有复选框。在构建4.4.x中,它们在选中时呈现复选标记。在构建5.5.5.0和5.5.6.0中,它们现在是十字符号。
不要认为设置该属性会产生任何影响,因为已经在pdf中设置了这个。如何获得复选标记而不是十字标记。
我正在使用NuGet提供的最新版本。如果无法解决此问题,可能必须返回到早期版本。
答案 0 :(得分:10)
从4.x版本升级后,我遇到了与iTextSharp 5.5.9类似的问题。设置复选框时,外观与原始pdf(在acrobat中创建)中设置的外观不同。在过度挖掘之后(参考资料难以使用= /)我终于找到了函数AcroFields.setField()的重载,该函数采用布尔参数' saveAppearance'。通过' true'保留原始pdf中设置的外观。
我能够挖掘出这些信息here
答案 1 :(得分:1)
您没有提及是否创建表单,或者如果您填写现有表单,那么我将向您展示例。
创建表单:
我已经调整了CheckboxCell示例,并且我创建了一个CheckboxCell2示例,该示例使用六种可用的复选框类型创建了六个复选框:
switch(i) {
case 0:
checkbox.setCheckType(RadioCheckField.TYPE_CHECK);
break;
case 1:
checkbox.setCheckType(RadioCheckField.TYPE_CIRCLE);
break;
case 2:
checkbox.setCheckType(RadioCheckField.TYPE_CROSS);
break;
case 3:
checkbox.setCheckType(RadioCheckField.TYPE_DIAMOND);
break;
case 4:
checkbox.setCheckType(RadioCheckField.TYPE_SQUARE);
break;
case 5:
checkbox.setCheckType(RadioCheckField.TYPE_STAR);
break;
}
checkbox_in_cell2.pdf的外观取决于PDF查看器的行为。这已经引起了很多混乱。我希望你的问题不是由于这种困惑造成的。
如果"突出显示字段"您的查看器设置已启用,结果如下所示:
如果"突出显示字段"您的查看器设置已关闭,结果如下所示:
有什么区别?
在第一个屏幕截图中,Adobe Reader根据存储在每个字段的窗口小部件注释中的/CA
字典的/MK
条目创建外观。 (/CA
被定义为小部件注释的普通标题,当它未与用户交互时将显示。)
在第二个屏幕截图中,显示了存储为该字段的真实外观的外观。这是最正确的外观。另一个外观(在第一个屏幕截图中)是由观众创建的,并且在不同的观看者中可能看起来不同(因此已经提到的混淆)。
展平表单
当您展平表单时,您会删除所有交互性。对于复选框,将保留(并显示)存储在PDF中的一个外观;另一个将被扔掉。
在CheckBoxFlatten中,我使用CheckboxCell2示例展平了我们创建的表单:
public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.setFormFlattening(true);
stamper.close();
}
结果如下:
如您所见,复选标记看起来像一个复选标记。我使用的是最新版的iText(夏普):5.5.8。这是人们应该期待的行为。正如我在关于问题" iTextSharp 5.5.6.0 Bug? check box tick mark changes"的评论中所解释的那样,较旧的iText版本的行为可能是错误的。
<强>结论:强>
我已经证明可以创建一个带复选标记而不是十字形的复选框。我已经证明,在展平表格时会保留复选标记。
如果您不同意,现在由您来证明(1)复选框具有正确的/AP
值以及/CA
字典中的/MK
条目(如果存在)与 on 外观相对应。并且(2)当您选中其中(1)为真的复选框时,该复选框会奇迹般地从复选标记变为十字形。
如果你无法证明自己,你应该提供PDF,以便我们自己检查。