使用iTextSharp在pdf字段中删除数据

时间:2014-11-20 08:27:59

标签: c# pdf pdf-generation itextsharp strikethrough

也许有人现在如何通过PDF格式的StrikeThrough数据?

我试过

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();

并添加了Text低于中间fielde位置并且剩下太多。怎么过于集中呢?

1 个答案:

答案 0 :(得分:2)

在iText中使用Font.STRIKETHRU作为字体属性是一个设计缺陷。我负责那个糟糕的设计选择, mea culpa 。如果您查阅ISO-32000-1,您会注意到strikethru不是字体(BaseFont)的属性,也不可能在字段上设置该属性。因此,除非您找到包含此类字符的字体(如评论中的mkl所示),否则无法使用“描边”内容填写字段。

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

  1. 您可以为表单字段定义自己的默认外观(/DA)。在这个外观中,您可以绘制文本和一条穿过它的线。我不打算给你一个如何做到这一点的例子,因为它不是一个好的解决方案:表单保持交互性,当最终用户点击该字段时,Adobe Reader将用一个外观替换/DA在观众中动态创建。此外观将显示没有strikethru的文本。
  2. 如果你可以接受表格被夷为平地,那么我会填写字段字段。即:检索字段的坐标,并使用ColumnText在这些坐标处绘制文本。有关示例,请参阅我对此问题的回答:How to continue field output on a second page?