首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ITextSharp HTML到PDF?

ITextSharp HTML到PDF?
EN

Stack Overflow用户
提问于 2010-05-13 05:22:10
回答 8查看 153.8K关注 0票数 63

我想知道ITextSharp是否有能力将HTML转换成PDF。我要转换的所有内容都是纯文本的,但不幸的是,关于ITextSharp的文档很少甚至没有,所以我不能确定这是否对我来说是一个可行的解决方案。

如果它不能做到这一点,谁能给我一些好的,免费的.net库,可以接受一个简单的纯文本HTML文档并将其转换为pdf?

蒂娅。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-05-13 06:32:56

在做了一些挖掘之后,我发现了一个用ITextSharp完成我所需要的东西的好方法。

以下是一些示例代码,如果它将来对其他人有帮助的话:

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    Document document = new Document();
    try
    {
        PdfWriter.GetInstance(document, new FileStream("c:\\my.pdf", FileMode.Create));
        document.Open();
        WebClient wc = new WebClient();
        string htmlText = wc.DownloadString("http://localhost:59500/my.html");
        Response.Write(htmlText);
        List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(htmlText), null);
        for (int k = 0; k < htmlarraylist.Count; k++)
        {
            document.Add((IElement)htmlarraylist[k]);
        }

        document.Close();
    }
    catch
    {
    }
}
票数 28
EN

Stack Overflow用户

发布于 2010-05-14 23:16:15

几周前我遇到了同样的问题,这是我发现的结果。此方法可将HTML快速转储为PDF。文档很可能需要对格式进行一些调整。

代码语言:javascript
复制
private MemoryStream createPDF(string html)
{
    MemoryStream msOutput = new MemoryStream();
    TextReader reader = new StringReader(html);

    // step 1: creation of a document-object
    Document document = new Document(PageSize.A4, 30, 30, 30, 30);

    // step 2:
    // we create a writer that listens to the document
    // and directs a XML-stream to a file
    PdfWriter writer = PdfWriter.GetInstance(document, msOutput);

    // step 3: we create a worker parse the document
    HTMLWorker worker = new HTMLWorker(document);

    // step 4: we open document and start the worker on the document
    document.Open();
    worker.StartDocument();

    // step 5: parse the html into the document
    worker.Parse(reader);

    // step 6: close the document and the worker
    worker.EndDocument();
    worker.Close();
    document.Close();

    return msOutput;
}
票数 65
EN

Stack Overflow用户

发布于 2013-07-12 03:39:54

下面是我在版本5.4.2 (来自nuget install)上所做的工作,以便从asp.net mvc控制器返回pdf响应。如果需要的话,可以修改为使用FileStream而不是MemoryStream作为输出。

我之所以把它贴在这里,是因为它是当前用于html -> pdf转换的iTextSharp使用情况的完整示例(忽略图像,我没有看过它,因为我的使用不需要它)。

它使用iTextSharp的XmlWorkerHelper,因此传入的hmtl必须是有效的XHTML,因此您可能需要根据您的输入做一些修正。

代码语言:javascript
复制
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;
using System.IO;
using System.Web.Mvc;

namespace Sample.Web.Controllers
{
    public class PdfConverterController : Controller
    {
        [ValidateInput(false)]
        [HttpPost]
        public ActionResult HtmlToPdf(string html)
        {           

            html = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                 <!DOCTYPE html 
                     PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN""
                    ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">
                 <html xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""en"" lang=""en"">
                    <head>
                        <title>Minimal XHTML 1.0 Document with W3C DTD</title>
                    </head>
                  <body>
                    " + html + "</body></html>";

            var bytes = System.Text.Encoding.UTF8.GetBytes(html);

            using (var input = new MemoryStream(bytes))
            {
                var output = new MemoryStream(); // this MemoryStream is closed by FileStreamResult

                var document = new iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER, 50, 50, 50, 50);
                var writer = PdfWriter.GetInstance(document, output);
                writer.CloseStream = false;
                document.Open();

                var xmlWorker = XMLWorkerHelper.GetInstance();
                xmlWorker.ParseXHtml(writer, document, input, null);
                document.Close();
                output.Position = 0;

                return new FileStreamResult(output, "application/pdf");
            }
        }
    }
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2822843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档