3

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

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

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

4

5 回答 5

3

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

另请参阅:调用 wkhtmltopdf 从 HTML 生成 PDF以获取 c# 中的说明

于 2012-08-21T15:50:05.200 回答
1

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

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

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

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

于 2013-09-07T13:48:04.997 回答
0

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

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

DocRaptor C# 示例

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

于 2012-08-21T20:58:06.817 回答
0

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

于 2012-08-21T15:52:00.383 回答
0

这将取决于 SDK 的具体部分,比如这个 也可以查看那些手册,在 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.
    }
}
于 2017-11-07T19:38:15.377 回答