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


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

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

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

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

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

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

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

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

    1. cmd = (WKHTMLTOPDF_PATH,
    2. *(() if sys.platform == 'win32' else ("--user-style-sheet", css_file)),
    3. "--encoding", "utf-8",
    4. "--disable-smart-shrinking",
    5. "--page-width", "%smm" % pagesize[0],
    6. "--page-height", "%smm" % pagesize[1],
    7. "--no-outline",
    8. "--quiet",
    9. "--enable-local-file-access",
    10. "-T", "0",
    11. "-L", "0",
    12. "-B", "0",
    13. "-R", "0",
    14. html_file,
    15. pdf_file
    16. )
    17. # print(cmd)
    18. subprocess.call(cmd,
    19. # shell=True,
    20. creationflags=0x08000000 if sys.platform == 'win32' else 0, # windows下隐藏cmd窗口
    21. stdin=subprocess.PIPE,
    22. stdout=subprocess.PIPE,
    23. stderr=subprocess.PIPE
    24. )

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

     

  • 相关阅读:
    Pygame实现推箱子
    外包干了3个月,技术倒退2年。。。
    外包干了5天,技术明显退步
    XSS之弹窗炸弹
    OpenMV与STM32之间的通信(附源码)
    mmdetection 用yolox训练自己的coco数据集
    【单片机基础】89C52单片机串口通信
    在Linux上配置Spug自动化运维平台,实现公网远程访问
    记一次任意文件下载到Getshell
    Linux Kernel:调度器scheduler
  • 原文地址:https://blog.csdn.net/fangkailove/article/details/126462263