【问题标题】:C# HTML to PDF code for use in a service (on a server)用于服务(在服务器上)的 C# HTML 到 PDF 代码
【发布时间】:2012-08-17 00:24:24
【问题描述】:

我正在寻找一些 C# 代码,以便从呈现的 HTML 页面在服务器上创建 .PDF 文档。我要转换为 .PDF 的 HTML 的结构和内容非常简单(DIV、TABLE、IMAGE 等),所以我需要以下代码:

  1. 创建可由客户端浏览保存的文档(在他们单击另存为 .PDF 后)
  2. 处理 HTML 流并将其转换为 .PDF
  3. 处理将图像添加到文档中
  4. 指定文档的分辨率 (?) - 这将是我想要的打印质量(高 DPI 并且我嵌入的图像将是高分辨率)

我已经看到了很多关于此的问题,但是在搜索了一个小时左右之后,我无法找到一个好的起点。任何指针都会很棒...理想情况下,我正在寻找一些我可以使用的源代码,而不是可购买的组件或可以完成所有工作的 Web 服务。

【问题讨论】:

标签: c# asp.net html pdf adobe


【解决方案1】:

你看过 wkhtmltopdf 吗?它是开源的,虽然是 LGPL,但我能找到最好的转换。它是命令行,所以应该在服务器上运行良好。 http://code.google.com/p/wkhtmltopdf/

另请参阅:Calling wkhtmltopdf to generate PDF from HTML 以了解 c# 中的说明

【讨论】:

  • 是的,我使用 wkhtmltopdf 完全满足了您的需求,因为我们需要 PDF 服务来为多个客户提供服务,并且不想维护单独的安装等。我最终将在线服务公开给任何人 html2pdfrocket.com . wkhtmltopdf 效果很好,而且是免费的。
【解决方案2】:

WkHtmlToPdf 满足您的所有要求(包括自定义 DPI 和嵌入图像)。

为了节省时间,我建议在 WkHtmlToPdf 上使用现成的 .NET 包装器之一,例如 PDF Generator for .NET(它是免费的),因为

  • 您根本不需要下载和安装 wkhtmltopdf(所有内容都打包到一个 DLL 中)
  • 您可以使用 1 行代码将 HTML 转换为 PDF:

    (new NReco.HtmlToPdfConverter()).GeneratePdf(htmlContent);

【讨论】:

    【解决方案3】:

    我在 Expected Behavior 工作,我们开发了一个名为 DocRaptor 的 HTML 到 PDF API,它使用 Prince XML 作为我们的 PDF 渲染引擎。既然您提到想要创建高质量的文档,我认为我们的服务非常适合。

    我们有 C# 的示例代码,您可以在这里找到:

    DocRaptor C# example

    DocRaptor 是一项基于订阅的服务,但我们还提供免费计划,允许用户每月最多创建 5 个文档。

    【讨论】:

      【解决方案4】:

      你可以试试Amyuni WebkitPDF。它是一个免费的组件,可以将 HTML 转换为 PDF 或 XPS,并且包中包含 C# 的示例代码。
      通常的免责声明适用

      【讨论】:

        【解决方案5】:

        依赖于 SDK 的特定部分,例如 one 您还可以查看那些手册,这些小部分在 Native SDK Pages 的服务器端操作部分中描述。 http://www.pdfonline.com/easypdf/sdk/usermanual/source/running_on_server/asp_sample.htm http://www.pdfonline.com/easypdf/sdk/usermanual/source/using_objects/native_net_printer.htm

        其他一切都取决于您的架构以及您希望如何将文件传输到运行 SDK 的机器。我想最简单的方法是使用 FileUpload 元素,这是一个可以添加到由 Visual Studio 设计的网站的 Web 窗体元素。您可以从该对象将文件本地保存在服务器上,或将其读入内存并处理转换。

        这是一个使用 FileUpload 的简单方法。切换到您想要的任何文件上传方法也很容易,唯一重要的是获取文件及其文件扩展名的 byte[] 数组,然后您可以将其发送到 PrintOut3()。或者您可以将文件本地保存到服务器上以使用 PrintJob 或 PrintJob2。

        //Upload and convert a File when a Button is pushed
        protected void Button1_Click(object sender, EventArgs e)
        {
            if(FileUpload1.HasFile)
            {
                string iEXT = Path.GetExtension(FileUpload1.FileName);
                byte[] iMEM = FileUpload1.FileBytes;
                byte[] oMEM;
        
                Printer oPrin = new Printer();
                PrintJob oPJob = oPrin.PrintJob;
        
                try
                {
                    oMEM = oPJob.PrintOut3(iMEM, iEXT);
                }
                catch (PrinterException ex)
                {
                    //Perform your desired Error Handling
                }
                finally
                {
                    oPrin.Dispose();
                }
        
                // Save oMEM as Desired, or use it how you see fit.
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-23
          • 1970-01-01
          • 1970-01-01
          • 2015-10-17
          • 1970-01-01
          • 1970-01-01
          • 2015-10-10
          • 1970-01-01
          相关资源
          最近更新 更多