有点奇怪的问题。我正在生成一些HTML报告,然后,由于Outlook 2010理解CSS / HTML /图像的局限性,我将整个该死的报告作为图像发送出去。
这一代很好。在浏览器中预览生成的HTML在各种分辨率下看起来很可爱。然而,WKHTMLTOPDF(或者更确切地说,wkhtmltoimage)给了我一些奇怪的行为,它的--width标志。
我有以下PHP代码:
# Converts a .html file to a .jpg file - requires wkhtmltopdf installed:
# http://wkhtmltopdf.org/downloads.html
function html_to_jpg($fileIn, $fileOut) {
echo "\nRendering HTML to image\n";
$command = 'wkhtmltoimage --width 1130 ' . $fileIn . ' ' . $fileOut;
$remove = 'rm -f ' . filter_var($fileOut, FILTER_SANITIZE_STRING);
try {
exec($remove);
exec($command);
return true;
} catch (Exception $e) {
return false;
}
}
这有效。它会生成指定宽度为“1130”的图像。但是,报告看起来有点狡猾,所以我增加了--width ...
$command = 'wkhtmltoimage --width 1140 ' . $fileIn . ' ' . $fileOut;
现在这仍然会生成一个图像,但是,图像现在是36480像素宽,内容居中,右边是一堆黑色空间。
通过实验,我已经确认宽度<1140不会产生这个问题,但是上面的每个宽度都可以。我已经在Ubuntu 15.10 Wily和CentOS 6.7上证实了这一点,它们都是从不同的RPM安装的。
还有其他人经历过这个吗?我做了一些蠢事(除了使用exec)?
我经历过相同的行为,我通过改变html元素的宽度来修复它,以匹配我在命令中传递的宽度,它工作正常
所以基本上在你的$ fileIn中添加一个样式标签
html, body {
width:1140px !important;
}
当然,如果没有其他因素影响文件中这些元素的宽度,你可以省略!important。