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

Ste*_*ven 5 .net c# itextsharp

我正在尝试从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();
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jay*_*ggs 5

对于更高版本的iTextSharp:

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

ParseToList()TextReader对其HTML源采用(抽象类),这意味着您可以使用StringReaderStreamReader(两者都使用TextReader作为基本类型).我使用了a,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);
}
Run Code Online (Sandbox Code Playgroud)

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

对于旧版本的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); 
} 
Run Code Online (Sandbox Code Playgroud)

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

祝好运!