我已经找到了在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)
方法?
答案 0 :(得分:1)
返回ConvertToHtmlForColumnText(String text)
的方法PdfContentByte
没有意义,毕竟该方法只有String text
可以使用,没有PdfWriter
或PdfContentByte
另一方面,方法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);
}
}
}
导致