从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“ 我假设问题应该与许可而不是代码更相关,但到目前为止我无法弄清楚
答案 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 ");
}