调用pdflatex的简单包装

pdflatex的Python项目详细描述


概述

这是一个简单的模块,以一种简单和干净的方式执行pdflatex。 默认情况下,pdflatex命令行实用程序会生成大量输出,并可以创建许多文件。

实例化

pdflatex类可以直接实例化,也可以通过帮助程序来实例化:

  • 来自_texfile(文件名)
  • 来自二进制字符串(binstr,jobname)
  • 来自_jinja2_template(jinja2_template,jobname=none,**render_kwargs)

jobname是可用于创建有效文件名的任何字符串;

示例:

在下面的所有示例中,文件系统中没有文件, 除非使用keep_pdf_filekeep_log_file参数请求 到create_pdf方法。

从.tex文件创建pdf

from pdflatex import PDFLaTeX

pdfl = PDFLaTeX.from_texfile('my_file.tex')
pdf, log, completed_process = pdfl.create_pdf(keep_pdf_file=True, keep_log_file=True)

函数create_pdf返回3个结果:

  1. 二进制字符串中的pdf文件;
  2. pdflatex生成的日志文件为text;
  3. 带有pdflatex执行结果的subprocess.completeprocess的实例。

另外,create_pdf需要几个参数:

  1. keep_pdf_file:可选布尔值。默认为false。如果为真,则保留PDF文件。它的位置和名称取决于-output directory和-jobname参数的值。它还派生自tex文件名或jinja2模板文件名(如果未给定参数);
  2. 保存日志文件:同样的事情,对于日志文件。
  3. env:执行pdflatex的默认env映射。你可能想跳过这个。

从jinja2模板创建pdf

import os
import pdflatex
import jinja2 

env = pdflatex.JINJA2_ENV
env['loader'] = jinja2.FileSystemLoader(os.path.abspath('.'))
env = jinja2.Environment(**env)
template = env.get_template('jinja.tex')
pdfl = pdflatex.PDFLaTeX.from_jinja2_template(template, data='Hello world!')
pdf, log, cp = pdfl.create_pdf()

不言而喻,只要注意pdflatex包含一个字典 Jinja2_env提供了一个环境参数建议,供您使用 Jinja2和乳胶。IT OS定义为:

JINJA2_ENV = {'block_start_string': '\BLOCK{',
              'block_end_string': '}',
              'variable_start_string': '\VAR{',
              'variable_end_string': '}',
              'comment_start_string': '\#{',
              'comment_end_string': '}',
              'line_statement_prefix': '%%',
              'line_comment_prefix': '%#',
              'trim_blocks': True,
              'autoescape': False }

从二进制字符串创建pdf文件:

import pdflatex

with open('my_file.tex', 'rb') as f:
    pdfl = pdflatex.PDFLaTeX.from_binarystring(f.read(), 'my_file')
pdf, log, cp = pdfl.create_pdf()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在Java和Javascript之间共享常量   c#无法使用Gson反序列化字节[]   如果字符串是实十进制数字,则在Java中仅显示十进制数字   与Android Studio的java FireBase同步失败   web应用程序的Java Oracle数据库更改通知问题   数组中缺少整数的java嵌套循环   zos在z/os上以TOD格式(一天中的时间)转换Java时间戳   java JAXB未根据注释生成XML(JDK 1.7)   java使用Twitter4j和Geolocation查找在该地区发布推文的用户,但如何获取用户ID?   在Libgdx中实现简单运动模糊的java意外结果   java在Android数据库中插入另一个EditText值?   java标准偏差数组(我的算法错误)   java如何修复M1 Mac的Ant javascript标记?   java遍历树标记值的长度   java理解Springboot中的Cron,自动发送电子邮件   java如何将“Data.Json”文件从资产保存到内部存储器,然后将其用于读/写   java代码在编写FirstDuplicate方法时会遇到时间限制问题   java将HTML转换为PDF并将其添加到段落中   javascript css()未设置正文标记的背景属性