如何使用Django生成Word文档

中小企业

我是Django的新手,我想创建一个表单,用户可以在其中输入一些数据,并创建一个Word文档供下载。

我正在使用template-docs文档库(https://pypi.org/project/templateddocs/)完成此任务,但出现错误。

在我的views.py中:

from templated_docs import fill_template
from templated_docs.http import FileResponse

def get_document(request):
    """
    A view to get a document filled with context variables.
    """
    context = {'user': request.user}  # Just an example

    filename = fill_template('sample.odt', context, output_format='pdf')
    visible_filename = 'greeting.pdf'

    return FileResponse(filename, visible_filename)

用户在表单中输入信息后,出现此错误:

get_template_sources()接受2个位置参数,但给出了3个

错误是由views.py中的变量产生的:filename = fill_template('sample.odt',context,output_format ='pdf')

Pratyush

该库是3年前写的,似乎不再维护。它使用LibreOffice viapylokit来解析源并生成输出。

另外,您可以使用Pandoc(通用文档转换器)+ Pandoc过滤器来解析源代码,进行修改并生成输出。

上面的整个代码可以通过以下类似的方式完成。

import io
import pypandoc
import panflute as pf
from django.http import FileResponse


def generate_invoice(request):
    template = 'files/invoice.docx'
    output_path = '/tmp/invoice - {}.pdf'.format(request.user.id)
    context = {
        '{{name}}': 'Foo'
    }

    # parse input file
    data = pypandoc.convert_file(template, 'json')
    f = io.StringIO(data)
    doc = pf.load(f)

    # do replacements
    for key, value in context.items():
        doc = doc.replace_keyword(key, pf.Str(value))

    # generate output
    with io.StringIO() as f:
        pf.dump(doc, f)
        contents = f.getvalue()
        pypandoc.convert_text(contents, 'pdf', format='json', outputfile=output_path)

    return FileResponse(open(output_path, 'rb'), filename='invoice.pdf')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章