Libre Office标签在iTextSharp中不会显示为“ AcroFields”吗?

时间:2019-03-13 13:38:52

标签: pdf itext libreoffice

所以我一直在尝试生成报告。我已经尝试了很多事情,但似乎总是有问题。我目前正在尝试使用iTextSharp 4.1.6。

我当前的策略是使用LibreOffice创建具有可编辑pdf字段的文档,或者我想它们被称为“ AcroFields”。我不确定,因为我找不到定义。但是无论如何,我都假设所有这些都是“ AcroFields”:

enter image description here

但是,如果我将所有这些都放入表单并导出为pdf,则只有其中一些会显示为AcroFields:

var reader = new PdfReader(File.ReadAllBytes("abc.pdf"));
foreach(var field in reader.AcroFields.Fields)
{
    Console.WriteLine(((DictionaryEntry)field).Key);
}

> Text Box 1
  Check Box 1
  Numeric Field 1
  Formatted Field 1
  Date Field 1
  List Box 1
  Combo Box 1
  Push Button 1
  Option Button 1

请注意如何不显示Label Field 1。如果存在,那么替换文本可能很容易。除非它不存在,所以看起来即使iText也无法在pdf中进行简单的文本替换。这是真的?您将如何使用iTextSharp替换pdf文档中的文本?

1 个答案:

答案 0 :(得分:1)

  

请注意如何不显示标签字段1。

由于没有 AcroForm 表单字段类型“标签”,因此通常将 labels 表单绘制为PDF文件中的常规页面内容。

  

如果存在,则替换文本可能很容易。除非它不存在,所以看起来即使iText也无法在pdf中进行简单的文本替换。这是真的吗?

实际上,通常在PDF中没有简单的文本替换。

  

如何使用iTextSharp替换pdf文档中的文本?

我将使用iText文本提取功能来确定要替换的文本的边界框坐标,该扩展功能可返回文本加坐标。然后,我将使用iText的PdfCleanUp...类通过删除来删除该文本。最后,我将替换文本作为新文本添加到开始时确定的边界框中。

不幸的是,在您的4.1.6版本中,没有良好的文本提取和修订功能;对于这种方法,您应该至少更新到5.5.x。

不过,或者,由于您一直在尝试生成报告,因此我认为模板设计已掌握在您的手中。在这种情况下,您可以将标签放入您可以 更改的只读文本字段中(它们仅对GUI用户只读)。