Libre Office Labels在iTextSharp中不显示为“AcroFields”?

问题描述 投票:0回答:1

所以我一直试图生成一份报告。我已经尝试过很多东西,但似乎总有问题。我正在尝试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文档中的文本?

pdf itext libreoffice
1个回答
1
投票

请注意标签字段1不存在的方式。

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

如果它存在,那么进行文本替换可能很容易。除非它不存在所以它看起来甚至iText也不能在pdf中进行简单的文本替换。这是真的?

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

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

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

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

或者,当您尝试生成报告时,我认为模板设计在您手中。在这种情况下,您可以将标签放入可以更改的只读文本字段(它们只对GUI用户是只读的)。

© www.soinside.com 2019 - 2024. All rights reserved.