在.NET中将HTML转换为PDF

雨燕双飞 提交于 2020-02-26 11:45:57

我想通过将HTML内容传递给函数来生成PDF。 我已经为此使用了iTextSharp,但是当它遇到表格并且布局变得凌乱时,它的表现不佳。

有没有更好的办法?


#1楼

尝试使用此PDF Duo .Net转换组件,可将HTML从ASP.NET应用程序转换为PDF,而无需使用其他dll。

您可以传递HTML字符串或文件,或流以生成PDF。 使用下面的代码(示例C#):

string file_html = @"K:\hdoc.html";   
string file_pdf = @"K:\new.pdf";   
try   
{   
    DuoDimension.HtmlToPdf conv = new DuoDimension.HtmlToPdf();   
    conv.OpenHTML(file_html);   
    conv.SavePDF(file_pdf);   
    textBox4.Text = "C# Example: Converting succeeded";   
}   

您可以在以下位置找到Info + C#/ VB示例: http : //www.duodimension.com/html_pdf_asp.net/component_html_pdf.aspx


#2楼

好的,使用这项技术。

src可以从这里下载,需要nant


#3楼

更新:现在我推荐在wkhtmltopdf上使用PupeteerSharp。

尝试wkhtmtopdf 。 这是到目前为止我发现的最好的工具。

对于.NET,您可以使用此小型库轻松调用wkhtmtopdf命令行实用程序。


#4楼

您可以创建HTML页面的位图,然后使用例如iTextSharp将位图插入PDF,而不是直接将HTML解析为PDF。

这是一个如何获取URL位图的代码。 我在SO的某处找到了它,如果找到了源,我将其链接起来。

public System.Drawing.Bitmap HTMLToImage(String strHTML)
{
    System.Drawing.Bitmap myBitmap = null;

    System.Threading.Thread myThread = new System.Threading.Thread(delegate()
    {
        // create a hidden web browser, which will navigate to the page
        System.Windows.Forms.WebBrowser myWebBrowser = new System.Windows.Forms.WebBrowser();
        // we don't want scrollbars on our image
        myWebBrowser.ScrollBarsEnabled = false;
        // don't let any errors shine through
        myWebBrowser.ScriptErrorsSuppressed = true;
        // let's load up that page!    
        myWebBrowser.Navigate("about:blank");

        // wait until the page is fully loaded
        while (myWebBrowser.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
            System.Windows.Forms.Application.DoEvents();

        myWebBrowser.Document.Body.InnerHtml = strHTML;

        // set the size of our web browser to be the same size as the page
        int intScrollPadding = 20;
        int intDocumentWidth = myWebBrowser.Document.Body.ScrollRectangle.Width + intScrollPadding;
        int intDocumentHeight = myWebBrowser.Document.Body.ScrollRectangle.Height + intScrollPadding;
        myWebBrowser.Width = intDocumentWidth;
        myWebBrowser.Height = intDocumentHeight;
        // a bitmap that we will draw to
        myBitmap = new System.Drawing.Bitmap(intDocumentWidth - intScrollPadding, intDocumentHeight - intScrollPadding);
        // draw the web browser to the bitmap
        myWebBrowser.DrawToBitmap(myBitmap, new System.Drawing.Rectangle(0, 0, intDocumentWidth - intScrollPadding, intDocumentHeight - intScrollPadding));
    });
    myThread.SetApartmentState(System.Threading.ApartmentState.STA);
    myThread.Start();
    myThread.Join();

    return myBitmap;
}

#5楼

使用Winnovative HTML转PDF转换器,您可以在一行中转换HTML字符串

byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlString, baseUrl);

基本URL用于解析HTML字符串中相对URL引用的图像。 另外,您可以在HTML中使用完整的URL或使用src =“ data:image / png”嵌入图像作为图像标签。

为了回答有关Winnovative转换器的“ fubaar”用户评论,必须进行更正。 该转换器不使用IE作为渲染引擎。 它实际上不依赖于任何已安装的软件,并且呈现与WebKit引擎兼容。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!