Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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# 从原始HTML/CSS内容从ASP.NET生成PDF?_C#_Asp.net_Html_Pdf - Fatal编程技术网

C# 从原始HTML/CSS内容从ASP.NET生成PDF?

C# 从原始HTML/CSS内容从ASP.NET生成PDF?,c#,asp.net,html,pdf,C#,Asp.net,Html,Pdf,我发送的电子邮件附有发票作为PDF。我已经在应用程序的其他地方在.aspx页面中创建了发票。我想使用Server.Execute返回输出HTML并从中生成PDF。否则,我将不得不使用报告工具在PDF上“绘制”发票。这有很多原因,其中最重要的一个原因是我必须更新.aspx页面和报告中的每一个小改动。做什么…无法直接从.NET中的HTML字符串生成PDF,但有许多第三方控件可以很好地工作 我在这方面取得了成功: 这是: 要问的重要问题是: 与IE、FF和Safari/Chrome三大浏览器相比,它的

我发送的电子邮件附有发票作为PDF。我已经在应用程序的其他地方在.aspx页面中创建了发票。我想使用Server.Execute返回输出HTML并从中生成PDF。否则,我将不得不使用报告工具在PDF上“绘制”发票。这有很多原因,其中最重要的一个原因是我必须更新.aspx页面和报告中的每一个小改动。做什么…

无法直接从.NET中的HTML字符串生成PDF,但有许多第三方控件可以很好地工作

我在这方面取得了成功: 这是:

要问的重要问题是:

  • 与IE、FF和Safari/Chrome三大浏览器相比,它的渲染是否正确
  • 它能处理CSS吗
  • 控件是否有自己的渲染引擎?如果是的话,反弹它。你不想相信一个自制的渲染引擎——浏览器在实现像素完美方面有一个非常困难的问题
  • 第三方控件需要哪些依赖项?越少越好

  • 还有一些其他的,但它们处理ActiveX显示等等。

    只要您能够确保使用正确的XHTML,您也可以使用类似于通过XSLT/XSL-FO将XML(XHTML)转换为PDF的产品

    掌握它需要一点学习曲线,但一旦你“掌握”了它,它就会非常有效


    Marc

    我们使用了一种叫做ABCPDF的产品来实现这一点,它的效果非常好


    这听起来像是一份工作。它可以采用HTML和CSS并生成PDF,然后您可以将其呈现给用户。它比大多数web浏览器更好地支持CSS3(工作人员包括CSS的发明者Håkon Wium Lie)

    请参阅,尤其是维基百科页面,以了解它可以生成的漂亮输出。作者们也有一个有趣的故事


    编辑:有一个可用的。

    由于您正在生成答案,您可以使用Report.NET之类的工具:

    我不同意那些说你不能直接从输出转换成PDF的答案,但是,因为你可以“重新调用”页面,将HTML作为流并转换它。但是,我不确定您希望使用什么工具来实现这一点。换句话说,这是可能的,但我不确定它是否值得。PDF创建库,如Report.NET,即使它们强制重用一些逻辑,并且没有自动转换,也更容易

    我没有尝试过这个组件,但我从那些尝试过的人那里听到了关于它的好消息。该模型更像HTML,但我不确定您是否可以简单地向其发送呈现的ASPX来创建PDF:
    我会走另一条路。假设您使用的是SQL Server,请使用SSRS并以这种方式生成PDF。

    如果您试图通过GOOGLE找到一些html到PDF的软件,您将得到一堆这样的东西。 大约有10个领导者,但大多数领导者在后台模式下使用IE DLL。 其中只有两个使用自己的解析引擎。 如果希望以编程方式创建PDF,请尝试ASP.NET项目中的组件。 它是一个轻松生成PDF发票、报表的组件。

    是一个从html生成PDF的免费且酷的exe。它是用C++编写的。但是它是一个包装器dotnet库,用于这个很棒的工具。我使用这个dotnet库实现了它,它非常好,它可以自己完成所有事情,您只需要将html作为数据源

    /// <summary>
    /// Converts html into PDF using nReco dll and wkhtmltopdf.exe.
    /// </summary>       
    private byte[] ConvertHtmlToPDF()
    {
      HtmlToPdfConverter nRecohtmltoPdfObj = new HtmlToPdfConverter();
      nRecohtmltoPdfObj.Orientation = PageOrientation.Portrait;
      nRecohtmltoPdfObj.PageFooterHtml = CreatePDFFooter();
      nRecohtmltoPdfObj.CustomWkHtmlArgs = "--margin-top 35 --header-spacing 0 --margin-left 0 --margin-right 0";           
      return nRecohtmltoPdfObj.GeneratePdf(CreatePDFScript() + ShowHtml() + "</body></html>");
    }
    
    //
    ///使用nReco dll和wkhtmltopdf.exe将html转换为PDF。
    ///        
    专用字节[]转换HTMLTOPDF()
    {
    HtmlToPdfConverter nRechtmlTopDFOBJ=新的HtmlToPdfConverter();
    nRecothTMLTOPDFOBJ.Orientation=PageOrientation.Portrait;
    nRecothTMLTOPDFOBJ.PageFooterHtml=CreatePdfooter();
    nRECOTHTMLOTPDFOBJ.CustomWKHTMLAGS=“--页边距顶部35--页眉间距0--页边距左侧0--页边距右侧0”;
    返回nRecothTMLTOPDFOBJ.generatePDDF(CreatePDFScript()+ShowHtml()+“”);
    }
    
    上面的函数是下面链接文章的摘录,详细解释了它。

    最初的问题是关于将另一个包含发票的aspx页面转换为PDF文档。发票可能使用了一些会话数据,用户建议使用Server.Execute()获取发票页面HTML代码,然后将该代码转换为PDF。无法直接转换发票页面URL,因为转换期间将创建新会话,并且会话数据将丢失

    这实际上是一种很好的技术,可以在转换过程中保留会话数据,这种技术在EvoPdf库中得到了应用。获取发票页面呈现的HTML字符串并将该字符串转换为PDF的完整C#代码为:

    // Execute the invoice page and get the HTML string rendered by this page
    TextWriter outTextWriter = new StringWriter();
    Server.Execute("Invoice.aspx", outTextWriter);
    
    string htmlStringToConvert = outTextWriter.ToString();
    
    // Create a HTML to PDF converter object with default settings
    HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
    
    // Use the current page URL as base URL
    string baseUrl = HttpContext.Current.Request.Url.AbsoluteUri;
    
    // Convert the page HTML string to a PDF document in a memory buffer
    byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlStringToConvert, baseUrl);
    
    // Send the PDF as response to browser
    
    // Set response content type
    Response.AddHeader("Content-Type", "application/pdf");
    
    // Instruct the browser to open the PDF file as an attachment or inline
    Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Convert_Page_in_Same_Session.pdf; size={0}", outPdfBuffer.Length.ToString()));
    
    // Write the PDF document buffer to HTTP response
    Response.BinaryWrite(outPdfBuffer);
    
    // End the HTTP response and stop the current page processing
    Response.End();
    

    使用Server.Execute()获取发票页面的HTML并使用将该代码转换为PDF的可能最低解决方案是:


    您可以使用PDFSharp或iTextSharp将html转换为pdf。PDFSharp不是免费的。

    此产品看起来不错,但它的构建并不适合与.NET应用程序打包。看起来他们至少有一个可以包装的.dll。我不能说我已经尝试过了-我已经用MindTouch Deki使用过它,它直接调用.exe。我能说的是,输出是华丽的-它更像是来自Internet Explorer的LaTeX而不是CutePDF:)没有挖掘他们钉在每个文档第一页上的徽标付费版本的Prince没有徽标。3800美元的服务器许可证!站点许可证的可能副本:1170美元标准许可证:1美元,495@Junto:是的-所以-创建软件要花钱-所以这个工具不仅仅是免费的-但是有一个免费的Xml2Pdf工作站版本,too@marc-当然要花钱,但披露这是一个付费产品,从HTML内容生成PDF需要标准许可证也无妨。NReco.LT(用于.NET Core)是一个付费软件包,需要商业许可证
    TextWriter outTextWriter = new StringWriter();
    Server.Execute("Invoice.aspx", outTextWriter);
    
    HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
    
    byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(outTextWriter.ToString(),
                httpContext.Current.Request.Url.AbsoluteUri);