【问题标题】:Strikethrough data in pdf field using iTextSharp使用 iTextSharp 删除 pdf 字段中的数据
【发布时间】:2014-11-20 08:27:58
【问题描述】:

也许有人现在如何 StrikeThrough 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();

并且添加的文本被放置在低于中间字段位置并且太左的位置。怎么太中心化了?

【问题讨论】:

  • 使用包含被划过的字符的字体。

标签: c# pdf pdf-generation itextsharp strikethrough


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我看到了你使用的 ColumnText,但是当我将 Chunk 放入 ColumnText 时,它没有集中,看起来像背景。有什么想法吗?
  • 有两种选择:如果在文本模式中使用ColumnText,则可以在列的级别定义对齐方式。如果您在复合模式中使用ColumnText,您应该将Chunk 包裹在PhraseParagraph 中,并在该元素的级别定义对齐方式。您不能在 Chunk 对象级别定义对齐方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
相关资源
最近更新 更多