0

也许有人现在如何在 PDF 表单中删除数据?

我试过了

AcroFields pdfFromFields = pdfStamper.AcroFields;
pdfFormFields.SetFieldProperty(fieldname, "sthhere", FontFactory.GetFont(FontFactory.TIMES_ROMAN, 12 , Font.STRIKETHRU),null);
pdfFormFields.SetField(fieldname, fieldvalue);

但出现错误“无法将 iTextSharp.text.Font 类型的对象转换为 iTextSharp.text.pdf.BaseFont 类型”谢谢您的帮助。

我用了

Chunk c1 = new Chunk ("insideText", FonctFactory.GetFont(FonctFactory.TIMES_ROMAN,12,Font.STRIKETHRU));
AcroFields form = stamper.getAcroFields();
Rectangle rect = form.getFieldPositions("fieldName").ElementAt(0).position;
ColumnText ct = new ColumnText(canvas);
ct.SetSimpleColumn(rect);
ct.AddElement(c1);
ct.Go();

并且添加的文本放置在中间字段位置下方并且左侧太多。怎么太中心化了?

4

1 回答 1

2

在iTextFont.STRIKETHRU中用作字体属性是一个设计缺陷。我要为那个糟糕的设计选择负责,mea culpa。如果您查阅 ISO-32000-1,您会注意到罢工不是字体 ( BaseFont) 的属性,也不可能在字段上设置该属性。因此,不可能用“划过”内容填写字段,除非您找到包含此类字符的字体(如 mkl 在他的评论中指出的那样)。

根据您想要获得的最终结果,还有另外两种可能的解决方法。

  1. 您可以为表单域定义自己的默认外观 ( /DA)。在这种外观中,您可以绘制文本和穿过它的线条。我不打算给你一个例子来说明如何做到这一点,因为这不是一个好的解决方案:表单保持交互,当最终用户单击该字段时,Adobe Reader 将用/DA动态创建的外观替换观众。这种外观将显示没有删除线的文本。
  2. 如果您可以接受表格被展平,那么我会以艰难的方式填写该字段。即:检索字段的坐标并使用ColumnText. 例如,请参阅我对这个问题的回答:如何在第二页上继续字段输出?
于 2014-11-20T09:03:18.377 回答