简体   繁体   English

从用 LaTex 编写的 str 行列表,如何在 Python 中生成 pdf?

[英]From a str list of lines written in LaTex, how to generate a pdf in Python?

I have a list of strings where each element is a line of LaTex.我有一个字符串列表,其中每个元素都是一行 LaTex。

Using flask, how can I generate the pdf to be return on a request?使用flask,如何生成要在请求时返回的pdf?

For example:例如:

document = []

def add( toAdd ):
    global document
    document.append( toAdd )

def begin(item):
    return "\\begin{"+str(item)+"}"

def end(item):
    return "\\end{"+str(item)+"}"

@route('/pdf')
def populate_document( protocol, document ):
    TITLE = "title"
    AUTHOR = "author"
    HEADER = "\\documentclass[12pt]{article}"
    ENUMERATE = "enumerate"
    DOCUMENT = "document"
    STEPS = "steps"

    steps = protocol[STEPS]

    # KEEP AT TOP
    add( HEADER )
    # KEEP AT TOP

    add( cmd( TITLE, protocol[TITLE] ) )
    add( cmd( AUTHOR, protocol[AUTHOR] ) )
    add( begin( DOCUMENT ) )
    add( cmd( "section*", protocol[TITLE] ) )


    add( end( ENUMERATE ) )
    add( end( DOCUMENT ) )

    ### HOW TO COMPILE `document` and RETURN AS PDF?

I'm happy to clarify further if needed.如果需要,我很乐意进一步澄清。

Thanks in advance.提前致谢。

The key package to making this work is latex .完成这项工作的关键包是latex With it, you can do something like this (extracted from a working demo):有了它,你可以做这样的事情(从一个工作演示中提取):

from flask import Flask
from jinja2 import FileSystemLoader
from latex import build_pdf
from latex.jinja2 import make_env

app = Flask(__name__)
env = make_env(loader=FileSystemLoader('templates'))

@app.route('/')
def home():
    latex_template = env.get_template('example.latex')
    pdf = build_pdf(template.render(text='Hello World'))
    return bytes(pdf), 200, {
        'Content-Type': 'application/pdf',
        'Content-Disposition': 'inline; filename="example.pdf"'}

Where example.latex is from the templates folder.其中example.latex来自templates文件夹。 Converting this to take LaTex from a string is left as an exercise.将此转换为从字符串中获取 LaTex 留作练习。

This works OK as a proof-of-concept on small files.这可以作为小文件的概念验证。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM