python subprocess.cal调用wkhtmltohtml中遇到的问题

最近项目中 使用了 wkhtmltohtml 工具, 这个工具转换pdf功能非常方便。但是在python作为命令来调用时有些要注意的地方,另外还有一些和字体相关的问题要注意。

一.字体问题引起的半角空格或 会被显示成空心方块。

这个应该是转换时在系统里找不到相应的字体而导致,或者是生成的系统内字体在其它使用端不存在引发的。这个可以指定一个CSS并给定一个通用的字体来解决。

下面是我在程序里产生一个css,然后在调用 wkhtmltopdf 将css文件路径时指定为--user-style-sheet 参数值就能解决此问题。

    with open(css_file, 'w', encoding='utf-8') as f:f.write(''' @font-face{font-family: "仿宋";src:url("/System/Library/Fonts/Helvetica.ttc")}* {font-family: Helvetica !important;font-weight:normal !important;}''')

二.os.system 和 subprocess.call 调用 wkhtmltopdf

1.由于我的程序需要等待pdf完使生成完后,才能往下执行,所以就要选择subprocess.call。两者是有区别的,有兴趣的可以试验一下。

2.调用时还有个问题,如果采用拼接命令方式,刚好wkhtmltopdf 本身所在目录路径有空格的话,就会报错,找不到wkhtmltopdf命令, 这个是python本身的问题。subprocess.call 的cmd参数除了支持str 外,还支持list(只要序列就行) , 采用list方式,把命令及所有参数,转化为列表元素就能避免这个问题了。注意是每个参数和参数值,都要独立元素。

cmd = (WKHTMLTOPDF_PATH,*(() if sys.platform == 'win32' else ("--user-style-sheet", css_file)),"--encoding", "utf-8","--disable-smart-shrinking","--page-width", "%smm" % pagesize[0],"--page-height", "%smm" % pagesize[1],"--no-outline","--quiet","--enable-local-file-access","-T", "0","-L", "0","-B", "0","-R", "0",html_file,pdf_file)
# print(cmd)
subprocess.call(cmd,# shell=True,creationflags=0x08000000 if sys.platform == 'win32' else 0, # windows下隐藏cmd窗口stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

3.在windows下面subprocess.call 调用默认会弹出命令窗口,执行一次就闪弹一次,影响美观,可以通过 creationflags 来隐藏。

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部