在ColumnText

时间:2017-05-04 07:44:40

标签: c# itext

我已经找到了在ColumnText中插入解析后的HTML的解决方案,但我还没有找到任何解决方案。

我有一个HTML文字:

String text = '<p>Hello <strong>world</strong>!</p>';

我需要将其插入ColumnText

PdfContentByte content = ConvertToHtmlForColumnText(text);
ColumnText cb = new ColumnText(content);

PDF文件中的结果必须是:

您好世界

您是否有任何想法实施ConvertToHtmlForColumnText(String text)方法?

1 个答案:

答案 0 :(得分:1)

返回ConvertToHtmlForColumnText(String text)的方法PdfContentByte没有意义,毕竟该方法只有String text可以使用,没有PdfWriterPdfContentByte

另一方面,方法ConvertToHtmlForColumnText(String text)返回元素以便稍后添加到ColumnText确实有意义,例如。

List<IElement> ConvertToHtmlForColumnText(String text)
{
    ListElementHandler listHandler = new ListElementHandler();
    XMLWorkerHelper.GetInstance().ParseXHtml(listHandler, new StringReader(text));
    return listHandler.List;
}

使用此自定义IElementHandler实施

public class ListElementHandler : IElementHandler
{
    List<IElement> elements = new List<IElement>();

    public List<IElement> List => elements;

    public void Add(IWritable w)
    {
        if (w is WritableElement)
        {
            foreach (IElement e in ((WritableElement)w).Elements())
            {
                elements.Add(e);
            }
        }
    }
}

可用于检索以后可以添加到ColumnText的元素

String text = "<p>Hello <strong>world</strong>!</p>";
List<IElement> parsedText = ConvertToHtmlForColumnText(text);

using (Document document = new Document(PageSize.A4))
{
    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(result, FileMode.Create));
    document.Open();

    ColumnText ct = new ColumnText(writer.DirectContent);
    ct.SetSimpleColumn(document.Left, document.Bottom, document.Right, document.Top);
    ct.Add(parsedText);
    ct.Go();
}

使用这个自定义扩展语法糖

public static class ColumnTextListExtension
{
    public static void Add(this ColumnText ct, List<IElement> elements)
    {
        foreach (IElement e in elements)
        {
            ct.AddElement(e);
        }
    }
}

导致

screenshot of result