图像以HTML格式显示,但不是使用WKHTMLTOPDF以PDF格式显示

时间:2013-04-23 13:22:23

标签: c# asp.net c#-4.0 wkhtmltopdf

您正在使用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代码区域,用于显示Image ..

<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" />

5 个答案:

答案 0 :(得分:2)

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

所以,而不是“../TempLogo/chafa.jpg”尝试“C:/yourpath/TempLogo/chafa.jpg”或“file:/// C:/yourpath/TempLogo/chafa.jpg”并查看如果这有帮助。如果是这样,你的相对路径就是问题所在。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

<img src="@Server.MapPath("~/path/to/your/image.jpg")" />

答案 4 :(得分:0)

我有这个问题,对我来说,&#34;修复&#34;是删除高度属性。

而不是

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

尝试

{{1}}

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