首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pdfstamper HTMLWorker itextSharp

pdfstamper HTMLWorker itextSharp
EN

Stack Overflow用户
提问于 2014-06-11 06:18:23
回答 1查看 1.7K关注 0票数 0

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

代码语言:javascript
复制
 pdfFormFields.SetField("Notes", cth.Notes.ToString());

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

代码语言:javascript
复制
text text <img alt="" height="133" src="/Content/UserFiles/635380078478327671/Images/test.png" width="179" /> 

我在HTMLWorker之前使用以下方法生成段落:

代码语言:javascript
复制
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;
    }

无法计算如何将段落添加到表单字段,甚至无法将新页添加到现有窗体或生成新文档并将表单和新文档合并。会很感激你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-11 08:04:16

假设您想要将表单扁平化(如果这不是您的意图,我将删除这个答案),我建议您参阅这个示例:MovieAds (对应的C#示例请参见http://tinyurl.com/itextsharpIIA2C08 )。

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

代码语言:javascript
复制
ColumnText ct = new ColumnText(canvas);
var elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
foreach (var e in elements) {
    ct.AddElement(e);
}

现在你需要这个领域的位置:

代码语言:javascript
复制
AcroFields.FieldPosition f = form.GetFieldPositions("Notes")[0];

现在可以使用此FieldPosition对象为ColumnText对象定义矩形:

代码语言:javascript
复制
ct.SetSimpleColumn(
    f.position.Left, f.position.GetBottom(2),
    f.position.GetRight(2), f.position.Top
  );

要呈现添加到ct中的元素,只需执行以下操作:

代码语言:javascript
复制
ct.Go();

注意,不适合矩形的元素将被省略。这就是我提到的示例返回布尔值的原因:

代码语言:javascript
复制
return ColumnText.HasMoreText(ct.Go(simulate));

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24155848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档