Ответ 1
вы на правильном пути с помощью StyleSheet.LoadTagStyle().
в основном это четырехэтапный процесс:
- получить HTML в строке
- создайте объект StyleSheet и вызовите StyleSheet.LoadTagStyle() для каждого стиля, который вы хотите.
- вызов HTMLWorker.ParseToList()
- добавьте IElement (ы), возвращенный с предыдущего вызова в объект Document.
здесь простой обработчик HTTP:
<%@ WebHandler Language='C#' Class='styles' %>
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Web;
using iTextSharp.text.html;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text;
using iTextSharp.text.pdf;
public class styles : IHttpHandler {
public void ProcessRequest (HttpContext context) {
HttpResponse Response = context.Response;
Response.ContentType = "application/pdf";
string Html = @"
<h1>h1</h1>
<p>A paragraph</p>
<ul>
<li>one</li>
<li>two</li>
<li>three</li>
</ul>";
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.H1, HtmlTags.FONTSIZE, "16");
styles.LoadTagStyle(HtmlTags.P, HtmlTags.FONTSIZE, "10");
styles.LoadTagStyle(HtmlTags.P, HtmlTags.COLOR, "#ff0000");
styles.LoadTagStyle(HtmlTags.UL, HtmlTags.INDENT, "10");
styles.LoadTagStyle(HtmlTags.LI, HtmlTags.LEADING, "16");
using (Document document = new Document()) {
PdfWriter.GetInstance(document, Response.OutputStream);
document.Open();
List<IElement> objects = HTMLWorker.ParseToList(
new StringReader(Html), styles
);
foreach (IElement element in objects) {
document.Add(element);
}
}
}
public bool IsReusable {
get { return false; }
}
}
вам нужна версия 5.0.6 для запуска кода выше. поддержка синтаксического анализа HTML была значительно улучшена.
если вы хотите узнать, какие теги поддерживаются текущей версией, см. SVN для класса HtmlTags.