C# pdfstamper HTMLWorker itextSharp
我的应用程序是MVC#,我使用itextSharp 5.3.4使用现有模板生成PDF。我使用以下方法将文本添加到表单字段(来自sql数据库): 我面临的挑战是添加html内容,例如: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" /> 无法理解如何将段落添加到表单字段,甚至无法将新页面添加到现有表单,或者无法生成新
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来保持交互,还是可以展平表单?非常感谢您花时间详细解释。我会检查一下样品。