我的应用程序是MVC c#,我使用itextSharp 5.3.4使用现有的模板生成PDF。我使用以下方法将文本添加到表单字段(来自sql数据库):
pdfFormFields.SetField("Notes", cth.Notes.ToString());我面临的挑战是添加html内容,例如:
text text <img alt="" height="133" src="/Content/UserFiles/635380078478327671/Images/test.png" width="179" /> 我在HTMLWorker之前使用以下方法生成段落:
public Paragraph CreateSimpleHtmlParagraph (String text)
{
string fontpath = System.Web.HttpContext.Current.Server.MapPath("~/Content/");
BaseFont bf = BaseFont.CreateFont(fontpath + "ARIALUNI.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
var f = new Font(bf, 10, Font.NORMAL);
var p = new Paragraph { Alignment = Element.ALIGN_LEFT, Font = f };
var styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.SPAN, HtmlTags.FONTSIZE, "10");
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);
using (var sr = new StringReader(text))
{
var elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
foreach (var e in elements)
{
p.Add(e);
}
}
return p;
}无法计算如何将段落添加到表单字段,甚至无法将新页添加到现有窗体或生成新文档并将表单和新文档合并。会很感激你的建议。
发布于 2014-06-11 08:04:16
假设您想要将表单扁平化(如果这不是您的意图,我将删除这个答案),我建议您参阅这个示例:MovieAds (对应的C#示例请参见http://tinyurl.com/itextsharpIIA2C08 )。
您有一个从iText获得的HTMLWorker元素列表。将它们添加到Paragraph对象中。这是错误的。应该将它们添加到ColumnText对象中:
ColumnText ct = new ColumnText(canvas);
var elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
foreach (var e in elements) {
ct.AddElement(e);
}现在你需要这个领域的位置:
AcroFields.FieldPosition f = form.GetFieldPositions("Notes")[0];现在可以使用此FieldPosition对象为ColumnText对象定义矩形:
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,则尝试重新添加相同的元素,但使用较小的字体。
https://stackoverflow.com/questions/24155848
复制相似问题