wkhtmltopdf放置页脚问题

时间:2016-06-03 06:05:19

标签: pdf pdf-generation wkhtmltopdf

从html生成pdf时遇到一个奇怪的问题, 我在过去使用wkhtmltopdf实用程序成功将html转换为pdf但现在我需要在每个页面的页脚都包含页面。我已经通过创建包含java脚本的html文件来实现这一点,该脚本读取页面参数并在页脚显示页面(附带Html)。 我面临的问题是部署,我在iis上托管这个应用程序,适用于任何任意位置但我的应用程序由于某些原因必须部署在Windows中的c:\驱动器中的程序文​​件下,它不起作用。 我使用asp.net来调用实用程序exe并传递参数,如:

if (!string.IsNullOrEmpty(document.HeaderUrl))
{
paramsBuilder.AppendFormat("--header-html {0} ", document.HeaderUrl);
paramsBuilder.Append("--margin-top 25 ");
paramsBuilder.Append("--header-spacing 5 "); 
}
if (!string.IsNullOrEmpty(document.FooterUrl))
{
paramsBuilder.AppendFormat("--footer-html {0} ", document.FooterUrl);
paramsBuilder.Append("--margin-bottom 25 ");
paramsBuilder.Append("--footer-spacing 5 ");
}

我的HTMl生成页面号:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <div style="bottom:0px;right:0px;">
        Page <span id='page'></span> of
        <span id='topage'></span>
    </div>
    <script type="text/javascript">
        var vars = {};
        var x = window.location.search.substring(1).split('&');
        for (var i in x) {
            var z = x[i].split('=', 2);
            vars[z[0]] = unescape(z[1]);
        }
        document.getElementById('page').innerHTML = vars.page;
        document.getElementById('topage').innerHTML = vars.topage;
    </script>
</body>
</html>

到实用程序。当我不使用页脚html一切正常但问题一旦它有页脚html url就开始出现。请注意页脚html路径是绝对的,我已尝试在应用程序根级文件夹上同时给予每个人权限。如果我在c盘外托管应用程序一切顺利。 记录的错误是“C:\ Temp \ 9dd853dc-bf32-441e-8edf-030daf774f95.html”的Html到PDF转换失败.Wkhtmltopdf输出: - 在错误的位置指定的margin-bottom“ 我假设问题应该与许可而不是代码更相关,但到目前为止我无法弄清楚

1 个答案:

答案 0 :(得分:0)

在这个问题上花费了几个小时之后,我能够找到确切的问题区域。它是我为wkhtmltopdf实用程序创建输入参数参数的方式。我的应用程序托管在c:\ program files(x86)下,通知“程序文件”之间有空格,我的.exe假设它是两个不同的参数。我通过将代码更改为:

来修复它
if (!string.IsNullOrEmpty(document.HeaderUrl))
            {
                paramsBuilder.AppendFormat("--header-html \"{0}\" ", document.HeaderUrl);
                paramsBuilder.Append("--margin-top 25 ");
                paramsBuilder.Append("--header-spacing 5 "); 
            }
            if (!string.IsNullOrEmpty(document.FooterUrl))
            {
                paramsBuilder.AppendFormat("--footer-html \"{0}\" ", document.FooterUrl);
                paramsBuilder.Append("--margin-bottom 25 ");
                paramsBuilder.Append("--footer-spacing 5 ");               
            }