Latex and Python integration

1

I need to generate and save a PDF file with some data I dealt with in a script I made to generate a report, but I do not know how to do it.

Does this data need to go through a .tex file before generating the PDF? If yes, how can I work with variables (?) Within the .tex file? For example, modify the header, add data in columns (data from a dataframe), add images containing graphics.

If not, what is the way to generate a PDF file with Python?

NOTE: I already have a .tex file that was written and configured by a third party, I just need to integrate this file with python.

    
asked by anonymous 27.06.2017 / 22:04

1 answer

5

Reportlab:

With reportlab you can generate pdfs without the need to generate a .tex , but if you know latex and the task you are doing is academic and / or scientific, I would opt for PyLaTeX.

PyLaTeX:

"The python library for creating and compiling latex files (or fragments). The purpose of this package is to provide an extensible and easy-to-use interface between python and latex."

Basic example (from the documentation):

from pylatex import Document, Section, Subsection, Command
from pylatex.utils import italic, NoEscape


def fill_document(doc):
    """Add a section, a subsection and some text to the document.

    :param doc: the document
    :type doc: :class:'pylatex.document.Document' instance
    """
    with doc.create(Section('A section')):
        doc.append('Some regular text and some ')
        doc.append(italic('italic text. '))

        with doc.create(Subsection('A subsection')):
            doc.append('Also some crazy characters: $&#{}')


if __name__ == '__main__':
    # Basic document
    doc = Document('basic')
    fill_document(doc)

    doc.generate_pdf(clean_tex=False)
    doc.generate_tex()

    # Document with '\maketitle' command activated
    doc = Document()

    doc.preamble.append(Command('title', 'Awesome Title'))
    doc.preamble.append(Command('author', 'Anonymous author'))
    doc.preamble.append(Command('date', NoEscape(r'\today')))
    doc.append(NoEscape(r'\maketitle'))

    fill_document(doc)

    doc.generate_pdf('basic_maketitle', clean_tex=False)

    # Add stuff to the document
    with doc.create(Section('A second section')):
        doc.append('Some text.')

    doc.generate_pdf('basic_maketitle2', clean_tex=False)
    tex = doc.dumps()  # The document as string in LaTeX syntax

Generated file:

\documentclass{article}%
\usepackage[T1]{fontenc}%
\usepackage[utf8]{inputenc}%
\usepackage{lmodern}%
\usepackage{textcomp}%
\usepackage{lastpage}%
%
\title{Awesome Title}%
\author{Anonymous author}%
\date{\today}%
%
\begin{document}%
\normalsize%
\maketitle%
\section{A section}%
Some regular text and some %
\textit{italic text. }%
\subsection{A subsection}%
Also some crazy characters: \$\&\#\{\}

%
\section{A second section}%
Some text.

%
\end{document}

Compiled Tex (basic_maketitle2.pdf):

    
28.06.2017 / 00:38