Pdf 自由办公室标签不';“我不会以”的形式出现;AcroFields“;在这里?

Pdf 自由办公室标签不';“我不会以”的形式出现;AcroFields“;在这里?,pdf,itext,libreoffice,Pdf,Itext,Libreoffice,所以我一直在尝试生成一份报告。我已经尝试了很多东西,但似乎总是有问题。我目前正在尝试iTextSharp 4.1.6 我目前的策略是使用LibreOffice创建一个带有可编辑pdf字段的文档,或者我猜它们被称为“”。我不确定,因为我找不到定义。但无论如何,我认为所有这些都是“AcroFields”: 但是,如果我将所有这些内容放入一个表单并导出为pdf,则其中只有一部分显示为字段: var reader = new PdfReader(File.ReadAllBytes("abc.pdf")

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

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

但是,如果我将所有这些内容放入一个表单并导出为pdf,则其中只有一部分显示为字段:

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
请注意
标签字段1如何不存在。如果它存在,那么进行文本替换可能很容易。但它不存在,所以看起来即使是iText也无法在pdf中进行简单的文本替换。这是真的吗?如何使用iTextSharp替换pdf文档中的文本

请注意标签字段1是如何不存在的

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

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

事实上,一般来说,PDF中没有简单的文本替换

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

我将使用iText文本提取功能确定要替换的文本的边界框坐标,该功能具有返回文本加坐标的扩展名。然后,我会使用iText的
PdfCleanUp…
类通过编校删除该文本。最后,我将在开始时确定的边界框中添加替换文本作为新文本

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


另外,尽管您一直在尝试生成报告,但我假设模板设计在您手中。在这种情况下,您可以将标签放入可以更改的只读文本字段中(它们对于GUI用户是只读的)。

我在任何地方都找不到字段类型列表。4.1.6是最新的免费版本,因此这可能是我使用iTextSharp的最后一个版本。你知道如果我这样做的话,它会将文本包装(并更新文档以反映包装)还是仅仅将g.DrawString放在pdf的顶部?使用只读文本框是不可行的,因为这看起来很糟糕。是的,我一直在尝试生成一份报告。我拥有的唯一一个不会生成糟糕报表的有效解决方案是使用OpenXML进行编辑,然后使用LibreOffice命令行参数将其转换为PDF。除了这会给web服务器带来各种各样的安全问题之外。我可以通过使用headless webkit生成pdf的工具获得不错的html->pdf转换,但这些都是命令行;旧版本和新版本都在特定条件下为您提供免费的库。AGPL之前的义务似乎要求不高,但AGPL义务也可以得到履行,可以认为是公平的。“你确定它可以免费使用吗?在github上,他们说你必须在商业应用程序中使用它后立即购买。”-如果你在AGPL下使用iText,基本上,您必须向与程序接触的所有人(不仅是运行您的程序的人,还包括从中检索输出PDF的人)提供对源代码的访问权限;对于仅在单个组织内使用的应用程序,这可能是正常的。此外,您始终可以通过咨询和支持软件来建立商业商业模式。因此,他们在github上的说法有些简化。“因此有一个
ColumnText
将触发回流?”-
ColumnText
将在确定的边界框内正确布局新文本,包括换行符等。但它不会更改任何外部现有内容。