• 关于python docker镜像环境下无法apt安装wkhtml2pdf的解决方案


    关于python docker镜像环境下无法apt安装wkhtml2pdf的解决方案

    事情经过:

    由于需求需要生成pdf文件,第一种方案是使用reportlab,使用后发现pdf文件内容需要逐行进行内容绘制,最大的问题是表格内容高度和宽度无法进行自适应,导致表格内容溢出,影响阅读体验,故最终选择pdfkit即依赖wkhtml2pdf将html文件生成pdf文件.

    1.下载wkhtml2pdf二进制压缩文件

    下载地址:https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

    2.解压并导出环境变量

    以下命令是以Dockerfile内的命令为基础,其它脚本可以做出修改适应

    FROM python:3.6
    ENV PYTHONUNBUFFERED 1
    WORKDIR /app
    COPY . /app
    RUN tar vxf /app/static/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && cp /app/wkhtmltox/bin/wk* /usr/local/bin/
    

    3.docker镜像普遍不支持中文之类的显示或生成,故生成的PDF文件有中文的时候还需要进行字体迁移支持

    • 对于带桌面的OS,wkhtml2pdf会以当前OS的默认字体进行输出,对于无桌面环境,查了资料wkhtml2pdf对于中文的支持貌似只支持宋体,有条件的可以进行测试下

    • 下载宋体,可以在Windows系统中直接copy字体文件或者从网络上下载宋体文件,然后生成字体缓存

      FROM python:3.6
      ENV PYTHONUNBUFFERED 1
      WORKDIR /app
      COPY . /app
      RUN cp /app/static/宋体.ttc /usr/share/fonts/truetype/dejavu && fc-cache -fv
      

    4.此时wkhtml2pdf使用环境已经就绪,可以进行html转换成pdf了

    # 普通html文件转pdf使用
    import pdfkit
    pdfkit.from_file('test.html', 'test.pdf')
    
    # 字符串转pdf使用
    import pdfkit
    pdfkit.from_string('testjashdjhsahdasjhdijashd', 'test.pdf')
    
    # Django请求视图中使用
    import pdfkit
    from django.shortcuts import render
    data = render(request, '模板.html', {'key': 'value'})
    pdfkit.from_string(data.content.decode('utf8'), 'test.pdf')
    
    # Django普通函数调用使用
    import pdfkit
    from django.template import loader
    output = loader.render_to_string('模板.html', {'key': 'value'})
    pdfkit.from_string(output, 'test.pdf')
    
  • 相关阅读:
    浅谈iOS7 AVFoundation 二维码扫描
    使用ZBarSDK生成和读取二维码
    NSURLConnection与NSURLSession大比拼
    iOS开发------之runtime的运用-类与对象&&&获取当前网络状态
    XML之解析------使用NSXMLPaser(SAX)和GDataXML(DOM)
    Beta阶段项目总结
    星光小组第二阶段团队绩效
    第二阶段冲刺第十天
    第二阶段冲刺第九天
    第二阶段冲刺第八天
  • 原文地址:https://www.cnblogs.com/zepc007/p/14741272.html
Copyright © 2020-2023  润新知