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

之前曾问过这个问题( iTextSharp 5.5.6.0 Bug?复选框勾选标记更改 )但是没有提供答案,我无法发表评论,因为我是新用户。 我有完全相同的问题。

我有一个现有的PDF,我正在以编程方式填写(C#)。

表格上有复选框。 在构建4.4.x中,它们在选中时呈现复选标记。 在构建5.5.5.0和5.5.6.0中,它们现在是十字符号。

不要认为设置属性会产生任何影响,因为已经在pdf中设置了这个。 我怎样才能得到一个复选标记而不是十字标记。

我正在使用NuGet提供的最新版本。 如果无法解决此问题,可能必须返回到早期版本。

从4.x版本升级后,我遇到了与iTextSharp 5.5.9类似的问题。 设置复选框时,外观与原始pdf(在acrobat中创建)中设置的外观不同。 在过度挖掘(参考资料难以使用= /)之后,我终于找到了一个带有布尔参数’saveAppearance’的函数AcroFields.setField()的重载。 传递’true’会保留原始pdf中设置的外观。

我能够在这里挖掘这些信息

您没有提及您是否正在创建表单,或者您是否填写现有表单,因此我将向您展示这两种情况。

创建表单:

我已经调整了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根据/MK字典的/CA条目创建,该条目存储在每个字段的窗口小部件注释中。 ( /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(Sharp):5.5.8。 这是人们应该期待的行为。 正如我在关于“ iTextSharp 5.5.6.0 Bug?复选框刻度标记更改 ”这一问题的评论中所解释的那样,旧版iText版本的行为可能是错误的。

结论:

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

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

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