C# pdfstamper HTMLWorker itextSharp

C# pdfstamper HTMLWorker itextSharp,c#,itextsharp,C#,Itextsharp,我的应用程序是MVC#,我使用itextSharp 5.3.4使用现有模板生成PDF。我使用以下方法将文本添加到表单字段(来自sql数据库): 我面临的挑战是添加html内容,例如: text text <img alt="" height="133" src="/Content/UserFiles/635380078478327671/Images/test.png" width="179" /> 无法理解如何将段落添加到表单字段,甚至无法将新页面添加到现有表单,或者无法生成新

我的应用程序是MVC#,我使用itextSharp 5.3.4使用现有模板生成PDF。我使用以下方法将文本添加到表单字段(来自sql数据库):

我面临的挑战是添加html内容,例如:

text text <img alt="" height="133" src="/Content/UserFiles/635380078478327671/Images/test.png" width="179" /> 

无法理解如何将段落添加到表单字段,甚至无法将新页面添加到现有表单,或者无法生成新文档并合并表单和新文档。谢谢你的建议

假设您希望将表单展平(如果不是您的意图,我将删除此答案),我想让您参考此示例:(参见相应的C#示例)

您有一个从
HTMLWorker
获得的iText元素列表。您正在将它们添加到
段落
对象中。这是错误的。您应该将它们添加到
ColumnText
对象中:

ColumnText ct = new ColumnText(canvas);
var elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
foreach (var e in elements) {
    ct.AddElement(e);
}
ct.SetSimpleColumn(
    f.position.Left, f.position.GetBottom(2),
    f.position.GetRight(2), f.position.Top
  );
现在需要字段的位置:

AcroFields.FieldPosition f = form.GetFieldPositions("Notes")[0];
现在可以使用此
FieldPosition
对象定义
ColumnText
对象的矩形:

ColumnText ct = new ColumnText(canvas);
var elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
foreach (var e in elements) {
    ct.AddElement(e);
}
ct.SetSimpleColumn(
    f.position.Left, f.position.GetBottom(2),
    f.position.GetRight(2), f.position.Top
  );
要渲染添加到
ct
的元素,只需执行以下操作:

ct.Go();
请注意,将忽略不适合矩形的元素。这就是我提到的示例返回布尔值的原因:

return ColumnText.HasMoreText(ct.Go(simulate));

如果
HasMoreText()
方法返回
true
,我会尝试重新添加相同的元素,但使用较小的字体。

我认为从来没有4.7版本的iTextSharp(我应该知道,我是iText组的首席执行官),因此您可能使用的是非官方版本。一个通常不会得到非官方版本的支持,因为我们不知道这样的版本里面有什么。你是对的,它是5.3.4。谢谢在我回答之前,请回答这个反问题:您需要生成的PDF来保持交互,还是可以展平表单?非常感谢您花时间详细解释。我会检查一下样品。