5

您好我正在使用 Wkhtmltopdf 使用 c#、Asp.net 从 Html 页面创建 PDF。PDF 可以顺利创建,但是当我将图像添加到 HTML 时,它不会显示在 PDF 上。

     public static string HtmlToPdf(string pdfOutputLocation, string outputFilenamePrefix, string[] urls,
        string[] options = null,
        // string pdfHtmlToPdfExePath = "C:\\Program Files (x86)\\wkhtmltopdf\\wkhtmltopdf.exe")

       string pdfHtmlToPdfExePath = "C:\\Program Files\\wkhtmltopdf\\wkhtmltopdf.exe")
    {
        string urlsSeparatedBySpaces = string.Empty;
        try
        {
            //Determine inputs
            if ((urls == null) || (urls.Length == 0))
                throw new Exception("No input URLs provided for HtmlToPdf");
            else
                urlsSeparatedBySpaces = String.Join(" ", urls); //Concatenate URLs

            string outputFolder = pdfOutputLocation;
            string outputFilename = outputFilenamePrefix + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss-fff") + ".PDF"; // assemble destination PDF file name

            var p = new System.Diagnostics.Process()
            {
                StartInfo =
                {
                    FileName = pdfHtmlToPdfExePath,
                    Arguments = ((options == null) ? "" : String.Join(" ", options)) + " " + urlsSeparatedBySpaces + " " + outputFilename,
                    UseShellExecute = false, // needs to be false in order to redirect output
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    RedirectStandardInput = true, // redirect all 3, as it should be all 3 or none
                    WorkingDirectory = HttpContext.Current.Server.MapPath(outputFolder),
                    CreateNoWindow = true
                }
            };

            p.Start();

            // read the output here...
            var output = p.StandardOutput.ReadToEnd();
            var errorOutput = p.StandardError.ReadToEnd();

            // ...then wait n milliseconds for exit (as after exit, it can't read the output)
            p.WaitForExit(60000);

            // read the exit code, close process
            int returnCode = p.ExitCode;
            p.Close();

            // if 0 or 2, it worked so return path of pdf
            if ((returnCode == 0) || (returnCode == 2))
                return outputFolder + outputFilename;
            else
                throw new Exception(errorOutput);
        }
        catch (Exception exc)
        {
            throw new Exception("Problem generating PDF from HTML, URLs: " + urlsSeparatedBySpaces + ", outputFilename: " + outputFilenamePrefix, exc);
        }
    }

这是我显示图像的 HTML 代码区域。

<div id="Image" class="right" style="background:#333;height:15%;width:25%;">

  <img id="LogoImage" runat="server" width="100%" height="100%" src="../TempLogo/chafa.jpg" />

4

5 回答 5

2

尝试为图像 src 添加完整路径。这通常是由于“../TempLogo/chafa.jpg”实际上不是 wkhtmltopdf 工作目录的正确相对 URL。

因此,不要尝试“../TempLogo/chafa.jpg”,而是尝试“C:/yourpath/TempLogo/chafa.jpg”或“file:///C:/yourpath/TempLogo/chafa.jpg”,看看是否有帮助. 如果是这样,那么您的相对路径就是问题所在。

于 2013-04-23T19:50:13.763 回答
2

我遇到了这个问题,对我来说,“修复”是删除高度属性。

代替

<img id="Logo" runat="server" width="100%" height="100%" src="../TempLogo/chafa.jpg" />

尝试

<img id="Logo" runat="server" width="100%" src="../TempLogo/chafa.jpg" />

我没有对此行为的解释,这可能是一个错误。

于 2017-11-19T13:07:33.840 回答
1

将 pdfkit 与 ruby​​ 一起使用,我发现如果我将带有 STDIN 上的图像的 html 文件发送到 wkhtmltopdf,则图像不会呈现。(即 wkhtmltopdf - toto.pdf :没有图像)

如果我通过手动传递一个 html 文件 (wkhtmltopdf toto.html toto.html) 执行完全相同的命令,这将有效。

不知道为什么,但是,我只是写了一个小包装器来这样称呼它,就是这样。

于 2013-08-04T05:35:11.890 回答
1

我使用视图来存储我想要的每个 pdf 模板的 HTML 标记,我将模型传递给视图。使用 Server.MapPath() 将为您提供图像的完整路径。

<img src="@Server.MapPath("~/path/to/your/image.jpg")" />
于 2017-07-27T04:48:58.480 回答
0

我最近看到一个 jpeg 文件转换失败 - 问题是图像是灰度图像。

请注意,所有灰度图像不一定都是灰度图像 - 如果是这种情况,请使用 irfanview 之类的程序进行检查。

于 2014-12-08T10:21:17.960 回答