2017-05-09 59 views
1

我已经编写了一个python程序,它使用Jinja2和Latex文件(template.tex)动态呈现tex文件,即将jinja变量传递给template.tex。该文件被称为jinja_engine.py。这里是执行的内容:dockerize python/jinja2程序生成pdf文件

# import functions 
# import variables 

if __name__ == '__main__': 
    template = latex_jinja_env.get_template('template.tex') 
    print (template.render(blocks = blocks, **options)) 

该程序基本上打印出控制台上呈现的文件。 我使用docker来构建我的程序的图像。这里是Dockerfile:

# base image 
FROM python:3-onbuild 

# run app 
CMD ["python", "./jinja_engine.py"] 

当我运行的容器,我再次得到显现文件打印我的控制台上。

接下来我想将渲染的文件转换为pdf。在我的应用程序中,我可以通过首先将渲染文件写入文件(例如out_file.tex),然后使用subprocess模块对其进行编译,例如subprocess.call(['pdflatex', 'out_file.tex'], shell=False)。我的问题是,我将如何在容器中做到这一点?我应该使用一个新的容器来编译output.tex到pdf吗?你会推荐什么?谢谢

回答

0

您可以创建一个shell脚本作为您的容器的主要命令,首先调用您的jinja_engine.py并将标准输出重定向到容器内的文件。

python jinja_engine.py > out.txt

然后,您可以调用该脚本pdflatex一个生成的PDF文件。

另外,您应该将主机目录映射到您的容器并将输出文件写入此目录。这样,您可以使用您的容器生成.tex.pdf文件,这些文件将在您映射到容器的目录中供您使用。这是使用docker run中的选项-v host_directory:container_directory完成的。

检查这个环节作进一步参考安装一个主机目录在容器中的数据量:https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-host-directory-as-a-data-volume

希望这会有所帮助,祝你好运!

+0

感谢您的帮助。我刚刚意识到只是在Dockerfile中调用'FROM python:3-onbuild'不会在容器中安装'pdflatex'“命令”。有没有一种图像可以让我做到这一点? – diegus

+0

将RUN指令添加到您的Dockerfile安装Latex。 'apt apt-get update && apt-get install -y texlive-latex-base'。 验证答案,如果它可以帮助你:) – kstromeiraos

+0

问题是与乳胶。容器中使用的基本安装不包含我使用的其他软件包,例如'lipsum.sty'软件包...所以pdf编译失败.. – diegus