HTML 转 PDF 排雷 之 wkhtmltopdf 转换得到的PDF没有内容

您所在的位置:网站首页 pdf打印出来是空白页怎么回事 HTML 转 PDF 排雷 之 wkhtmltopdf 转换得到的PDF没有内容

HTML 转 PDF 排雷 之 wkhtmltopdf 转换得到的PDF没有内容

2024-07-15 14:08| 来源: 网络整理| 查看: 265

问题描述

用浏览器打开正常,但使用工具 wkhtmltopdf 转换成 PDF 文档后却看不到任何内容。

html 代码如下:

index --allow 这个参数只在“页面对象”是一个文件时有效,在“页面对象”是一个url时此参数无效。 这个参数的作用是为HTML页面中使用相对路径引用的文件指定一个加 载文件的基目录。也就是说HTML文件中所有以相对路径指定的文件都 会从 --allow 参数指定的目录进行加载。其实在HTML中指定 base 标签 可以达到同样的目的。如果两者(--allow参数和base标签)都没有指定, 则使用当前处理的HTML文件所在的目录作为基目录加载当前处理的HTML中相对路径指定的文件。

CSS 代码如下:

.main { position:absolute; top:0; left:0; overflow-y:auto; bottom:0; right:0 }

在浏览器中打开是正常的,但是用 wkhtmltopdf 转换成PDF文档后看到的是一片空白。

反复修改CSS代码中overflow-y的值发现以下规则:

overflow-y:auto 时PDF文档是空白 overflow-y:scroll 时PDF文档是空白 overflow-y:visible 时PDF文档正常了 overflow-y:hidden 时PDF文档空白 以上四种情况下在浏览器中页面显示都是正常的

反复修改CSS代码中的position属性发现以下规则:

不设计position时 PDF文档正常 position:static 时 PDF 文档正常 position:relative 时 PDF 文档正常 position:fixed 时 PDF 文档是空白 position:absolute 时 PDF 文档是空白 以上五种情况下在浏览器中页面显示都是正常的 结论

wkhtmltopdf 工具中对 HTML中的元素渲染时,如果元素的CSS属性position的值是fixed或absolute时,是不给元素高度的;也就是如果一个元素的CSS属性position的值为absolute,并且不给这个元素设置高度时,wkhtmltopdf会把这个元素的高设置为0px;

验证

对CSS代码加一个高度属性,得到如下代码

.main { position:absolute; top:0; left:0; overflow-y:auto; bottom:0; right:0; height: 100px; }

改成上述CSS代码后生成的PDF文档显示正常。

返得修改height属性的值得到如下规则:

height:0px;时PDF文档空白 height:10px;时PDF文档显示出10px高度的内容,有滚动条 height:20px;时PDF文档显示出20px高度的内容,有滚动条 height:50px;时PDF文档显示正常 以上四种情况在浏览器显示都与PDF文档相同 总结

wkhtmltopdf 对于overflow:auto 的处理是,把overflow的值当成scroll,如果再当元素的position为fixed或absolute且没有给元素设置高度时,就把元素的高度处理成0px;于是我就得到了问题描述中的那个空白的PDF文档。

解决办法是:

要么把overflow的值设置成visible 把position的值设置成static或relative 给元素设置高度。 把bottom:0;这部分代码去掉 总结之后

又做了几个实验,发现如下规则:

把bottom属性去掉后PDF文档正常了 保留bottom属性去掉top属性,得到空白的PDF文档 把bottom属性和top属性都去掉,PDF文档正常

总之,这个bug与以下属性有关

position:absolute; top:0; overflow-y:auto;

所以这个bug很复杂,还是在github上通过issues报告给作者吧。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3