wkhtmltopdf:在C#代码中运行时失败

时间:2013-09-25 07:27:41

标签: c# pdf wkhtmltopdf

我使用wkhtmltopdf从给定的HTML创建PDF。基本上我们有一些基于图形/图表的报告,因此我们使用C#代码创建HTML,然后使用WKHTMLTOPDF创建PDF。它工作正常,但昨天它停止创建PDF。我尝试调试和处理工作没有任何错误或消息。我们没有得到PDF作为输出。我尝试从命令行运行并使用Wkhtmltopdf.exe,它确实创建了所有详细信息的PDF。

我的代码是

public static bool HTMLtoPDF(string HTMLPath, string PDFPath, PageOrientation orientation)
{
    using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
    {
        string dir = Path.GetDirectoryName(Assembly.GetAssembly(typeof(Vikasumit.VSCommon)).Location) + "\\wkhtmltopdf\\";

        proc.StartInfo.WorkingDirectory = dir;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.RedirectStandardError = true;
        proc.StartInfo.CreateNoWindow = true;
        proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.FileName = dir + "wkhtmltopdf.exe";
        if (orientation == PageOrientation.Landscape)
        {
            proc.StartInfo.Arguments = " --page-width 11in --page-height 8.5in --margin-left 0.5cm --margin-right 0 --margin-top 1.25cm --margin-bottom 0 " + HTMLPath + "  " + PDFPath;
        }
        else
        {
            proc.StartInfo.Arguments = " --page-width 8.5in --page-height 11in --margin-left 0.5cm --margin-right 0 --margin-top 1.25cm --margin-bottom 0 " + HTMLPath + "  " + PDFPath;
        }
        proc.Start();
        proc.WaitForExit();
        string result = proc.StandardOutput.ReadToEnd();
        proc.Close();
        proc.Dispose();
    }
    return false;
}

确实这很好用,这个代码适用于一页或两页的PDF,但是这个报告有800页[大约1.2MB的HTML文件和cmmand行的输出文件大约是2.3MB。]

知道这里可能出现什么问题吗?它是对任务的内存分配有限还是什么?感谢。

1 个答案:

答案 0 :(得分:1)

我使用Rotativa nuget组件将wkhtmltopdf可执行文件包装在我的Web应用程序中。我不保存到文件,而是用它来下载客户端的pdf ...

1)他们建议添加忽略负载错误开关(不知道它涵盖了什么)            --load-error-handling ignore

2)由于您写入磁盘,并且只发生在大文件上,是否存在磁盘空间问题?