C# 使用iTextSharp删除pdf字段中的数据

C# 使用iTextSharp删除pdf字段中的数据,c#,pdf,pdf-generation,itextsharp,strikethrough,C#,Pdf,Pdf Generation,Itextsharp,Strikethrough,也许现在有人知道如何删除PDF格式的数据了 我试过了 AcroFields pdfFromFields = pdfStamper.AcroFields; pdfFormFields.SetFieldProperty(fieldname, "sthhere", FontFactory.GetFont(FontFactory.TIMES_ROMAN, 12 , Font.STRIKETHRU),null); pdfFormFields.SetField(fieldname, fieldvalue);

也许现在有人知道如何删除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();

并且添加的文本放置在低于中间字段位置的位置,并且太多。太集中了吗?

在iText中使用
Font.STRIKETHRU
作为字体属性是一个设计缺陷。我要为糟糕的设计选择负责,我的错。如果查阅ISO-32000-1,您会注意到删除线不是字体的属性(
BaseFont
),也不可能在字段上设置该属性。因此,除非您找到包含此类字符的字体(如mkl在其注释中所示),否则不可能用“笔划通过”内容填充字段

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

  • 您可以为表单字段定义自己的默认外观(
    /DA
    )。在这种外观中,您可以绘制文本和一条贯穿文本的线。我不打算给你一个如何实现这一点的例子,因为这不是一个好的解决方案:表单保持交互,当最终用户单击字段时,Adobe Reader将用在查看器中动态创建的外观替换
    /DA
    。此外观将显示不带删除线的文本
  • 如果您可以接受将表单展平,那么我将以艰难的方式填写字段。即:检索字段的坐标,并使用
    ColumnText
    在这些坐标处绘制文本。例如,请参见我对该问题的回答:

  • 使用包含笔划字符的字体。是的,我看到ColumnText由您使用,但当我将块放入ColumnText时,它不是集中的,看起来像背景。有什么想法吗?有两个选项:如果在文本模式下使用
    ColumnText
    ,可以在列级别定义对齐方式。如果在复合模式下使用
    ColumnText
    ,则应将
    包装在
    短语
    段落
    中,并在该元素级别定义对齐方式。不能在
    对象级别定义对齐方式。