当Check Type Style为Check Mark时,iTextSharp 5.5.6输入一个十字符号

时间:2015-12-23 16:22:52

标签: c# itextsharp

之前曾问过这个问题(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提供的最新版本。如果无法解决此问题,可能必须返回到早期版本。

2 个答案:

答案 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查看器的行为。这已经引起了很多混乱。我希望你的问题不是由于这种困惑造成的。

如果"突出显示字段"您的查看器设置已启用,结果如下所示:

enter image description here

如果"突出显示字段"您的查看器设置已关闭,结果如下所示:

enter image description here

有什么区别?

在第一个屏幕截图中,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();
}

结果如下:

enter image description here

如您所见,复选标记看起来像一个复选标记。我使用的是最新版的iText(夏普):5.5.8。这是人们应该期待的行为。正如我在关于问题" iTextSharp 5.5.6.0 Bug? check box tick mark changes"的评论中所解释的那样,较旧的iText版本的行为可能是错误的。

<强>结论:

我已经证明可以创建一个带复选标记而不是十字形的复选框。我已经证明,在展平表格时会保留复选标记。

如果您不同意,现在由您来证明(1)复选框具有正确的/AP值以及/CA字典中的/MK条目(如果存在)与 on 外观相对应。并且(2)当您选中其中(1)为真的复选框时,该复选框会奇迹般地从复选标记变为十字形。

如果你无法证明自己,你应该提供PDF,以便我们自己检查。