zoukankan      html  css  js  c++  java
  • 程序生成word与PDF文档的方法(python)

    程序导出word文档的方法

    将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freemarker这样的模板引擎这样的方式。php中也有一些相应的方法,但在python中将web/html内容生成world文档的方法是很少的。其中最不好解决的就是如何将使用js代码异步获取填充的数据,图片导出到word文档中。

    1. unoconv

    功能:

    1.支持将本地html文档转换为docx格式的文档,所以需要先将网页中的html文件保存到本地,再调用unoconv进行转换。转换效果也不错,使用方法非常简单。

    # 安装
    sudo apt-get install unoconv
    # 使用
    unoconv -f pdf *.odt
    unoconv -f doc *.odt
    unoconv -f html *.odt
    

    缺点:

    1.只能对静态html进行转换,对于页面中有使用ajax异步获取数据的地方也不能转换(主要是要保证从web页面保存下来的html文件中有数据)。
    2.只能对html进行转换,如果页面中有使用echarts,highcharts等js代码生成的图片,是无法将这些图片转换到word文档中;
    3.生成的word文档内容格式不容易控制。

    2. python-docx

    功能:

    1.python-docx是一个可以读写word文档的python库。

    使用方法:

    1.获取网页中的数据,使用python手动排版添加到word文档中。

    from docx import Document
    from docx.shared import Inches
    document = Document()
    document.add_heading('Document Title', 0)
    p = document.add_paragraph('A plain paragraph having some ')
    p.add_run('bold').bold = True
    p.add_run(' and some ')
    p.add_run('italic.').italic = True
    document.add_heading('Heading, level 1', level=1)
    document.add_paragraph('Intense quote', style='IntenseQuote')
    document.add_paragraph(
        'first item in unordered list', style='ListBullet'
    )
    document.add_paragraph(
        'first item in ordered list', style='ListNumber'
    )
    document.add_picture('monty-truth.png', width=Inches(1.25))
    table = document.add_table(rows=1, cols=3)
    hdr_cells = table.rows[0].cells
    hdr_cells[0].text = 'Qty'
    hdr_cells[1].text = 'Id'
    hdr_cells[2].text = 'Desc'
    for item in recordset:
        row_cells = table.add_row().cells
        row_cells[0].text = str(item.qty)
        row_cells[1].text = str(item.id)
        row_cells[2].text = item.desc
    document.add_page_break()
    document.save('demo.docx')
    
    from docx import Document
    from docx.shared import Inches
    document = Document()
    for row in range(9):
        t = document.add_table(rows=1,cols=1,style = 'Table Grid')
        t.autofit = False #很重要!
        w = float(row) / 2.0
        t.columns[0].width = Inches(w)
    document.save('table-step.docx')
    

    缺点:

    1.功能非常弱。有很多限制比如不支持模板等,只能生成简单格式的word文档。

    程序导出PDF文档方法

    1.pdfkit

    功能:

    1.wkhtmltopdf主要用于HTML生成PDF。
    2.pdfkit是基于wkhtmltopdf的python封装,支持URL,本地文件,文本内容到PDF的转换,其最终还是调用wkhtmltopdf命令。是目前接触到的python生成pdf效果较好的。

    优点:

    1.wkhtmltopdf:利用webkit内核将HTML转为PDF

    webkit是一个高效、开源的浏览器内核,包括Chrome和Safari在内的浏览器都使用了这个内核。Chrome打印当前网页的功能,其中有一个选项就是直接“保存为 PDF”。
    2.wkhtmltopdf使用webkit内核的PDF渲染引擎来将HTML页面转换为PDF。高保真,转换质量很好,且使用非常简单。

    使用方法:

    # 安装
    pip install pdfkit
    # 使用
    import pdfkit
    pdfkit.from_url('http://google.com', 'out.pdf')
    pdfkit.from_file('test.html', 'out.pdf')
    pdfkit.from_string('Hello!', 'out.pdf')

    
    ####缺点:
    >1.对使用echarts,highcharts这样的js代码生成的图标无法转换为pdf(因为它的功能主要是将html转换为pdf,而不是将js转换为pdf)。对于纯静态页面的转换效果还是不错的。
    
    ###2.其他
    >其他生成pdf的插件还有:weasyprint,reportlab,PyPDF2等,经简单试验都不如pdfkit效果好,且有些用法复杂。
  • 相关阅读:
    免费的视频、音频转文本
    Errors are values
    Codebase Refactoring (with help from Go)
    Golang中的坑二
    Cleaner, more elegant, and wrong(msdn blog)
    Cleaner, more elegant, and wrong(翻译)
    Cleaner, more elegant, and harder to recognize(翻译)
    vue控制父子组件渲染顺序
    computed 和 watch 组合使用,监听数据全局数据状态
    webstorm破解方法
  • 原文地址:https://www.cnblogs.com/lijingchn/p/5894658.html
Copyright © 2011-2022 走看看