需要帮助使用itextsharp从HTML创建PDF

我正在尝试从HTML页面中创建PDF。 我正在使用的CMS是EPiServer。

到目前为止这是我的代码:

protected void Button1_Click(object sender, EventArgs e) { naaflib.pdfDocument(CurrentPage); } public static void pdfDocument(PageData pd) { //Extract data from Page (pd). string intro = pd["MainIntro"].ToString(); // Attribute string mainBody = pd["MainBody"].ToString(); // Attribute // makae ready HttpContext HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ContentType = "application/pdf"; // Create PDF document Document pdfDocument = new Document(PageSize.A4, 80, 50, 30, 65); //PdfWriter pw = PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream); PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream); pdfDocument.Open(); pdfDocument.Add(new Paragraph(pd.PageName)); pdfDocument.Add(new Paragraph(intro)); pdfDocument.Add(new Paragraph(mainBody)); pdfDocument.Close(); HttpContext.Current.Response.End(); } 

这将输出文章名称,简介和主体的内容。 但它没有解析文章文本中的HTML,也没有布局。

我试过看看http://itextsharp.sourceforge.net/tutorial/index.html,而不是更聪明。

任何指向正确方向的指针都非常感谢:)

对于iTextSharp的更高版本:

使用iTextSharp,您可以使用iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList()方法从HTML创建PDF。

ParseToList()为其HTML源采用TextReader (抽象类),这意味着您可以使用StringReaderStreamReader (两者都使用TextReader作为基类型)。 我使用了StringReader并且能够从简单的标记生成PDF。 我试图使用从网页返回的HTML,并在除了简单页面之外的所有页面上都有错误。 即使是我检索过的简单网页( http://black.ea.com/ )也正在将页面的“head”标签内容呈现到PDF上,所以我认为HTMLWorker.ParseToList()方法对于格式化它解析的HTML。

无论如何,如果你想尝试这里我使用的测试代码:

 // Download content from a very, very simple "Hello World" web page. string download = new WebClient().DownloadString("http://black.ea.com/"); Document document = new Document(PageSize.A4, 80, 50, 30, 65); try { using (FileStream fs = new FileStream("TestOutput.pdf", FileMode.Create)) { PdfWriter.GetInstance(document, fs); using (StringReader stringReader = new StringReader(download)) { ArrayList parsedList = HTMLWorker.ParseToList(stringReader, null); document.Open(); foreach (object item in parsedList) { document.Add((IElement)item); } document.Close(); } } } catch (Exception exc) { Console.Error.WriteLine(exc.Message); } 

我找不到HTMLWorker.ParseToList()支持的HTML构造的任何文档; 如果你这样做,请在这里发布。 我相信很多人都会感兴趣。

对于旧版本的iTextSharp:您可以使用iTextSharp.text.html.HtmlParser.Parse方法基于html创建PDF。

这是一个展示这个的片段:

 Document document = new Document(PageSize.A4, 80, 50, 30, 65); try { using (FileStream fs = new FileStream("TestOutput.pdf", FileMode.Create)) { PdfWriter.GetInstance(document, fs); HtmlParser.Parse(document, "YourHtmlDocument.html"); } } catch(Exception exc) { Console.Error.WriteLine(exc.Message); } 

一个(主要针对我)问题是HTML必须严格遵守XHTML。

祝好运!