Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要使用itextsharp从HTML创建PDF的帮助吗_C#_.net_Itextsharp - Fatal编程技术网

C# 需要使用itextsharp从HTML创建PDF的帮助吗

C# 需要使用itextsharp从HTML创建PDF的帮助吗,c#,.net,itextsharp,C#,.net,Itextsharp,我正试图从HTML页面中提取PDF。我使用的CMS是epserver 这是我目前的代码: protected void Button1_Click(object sender, EventArgs e) { naaflib.pdfDocument(CurrentPage); } public static void pdfDocument(PageData pd) { //Extract data from Page (

我正试图从HTML页面中提取PDF。我使用的CMS是epserver

这是我目前的代码:

    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进行分析,也没有布局

我已经试着看了一眼,但没有变聪明


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

对于更高版本的iTextSharp:

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

parsetList()
TextReader
(一个抽象类)作为其HTML源代码,这意味着您可以使用
StringReader
StreamReader
(两者都使用TextReader作为基本类型)。我使用了
StringReader
,能够从简单的标记生成PDF。我试图使用从网页返回的HTML,但除了simplest页面外,其他所有页面都出现了错误。甚至我检索到的最简单的网页()也在将页面的“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);
}
我找不到HTML构造
HTMLWorker.parsetList()支持的任何文档;如果有,请把它贴在这里。我相信很多人都会感兴趣

对于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


祝你好运

太好了。谢谢
YourHtmlDocument.html
可以作为该页面的URL吗?另外,我认为最新版本的iTextSharp没有HtmlParser。我得到的最接近的是
iTextSharp.text.html.simpleparser.HTMLWorker
,但是使用它,需要一个文本阅读器进行解析…@Steven-你说得对!很抱歉,当我回答您的问题时,我加载了一个旧的测试程序(带有旧版本的iTextSharp)。你是对的,HTMLWorker是你想要的方式。我根据使用HTMLWorker和iTextSharp 5.0进行的(有限的)测试编辑了我的回复。干得好!如果我没记错的话,我认为网页必须使用严格的XHTML,或者是100%正确的XHTML。所以也许这就是为什么它如此挑剔的原因!我要试一试。如果证明不够好,我将使用
ABCpdf