How to Convert TEX to PDF Using an API

How to Convert TEX to PDF Using an API

This article presents a step-by-step tutorial with which you can convert your LaTeX source file to PDF by calling a JSON to PDF API.

The modern approach to API development is often associated with the use of the cloud. Therefore, it has become increasingly important to present novel ideas capable of improving users' and developers' digital experiences. With that in mind, the DynamicDocs API approach to PDF generation is to use LaTeX, a language that is designed for high-quality typesetting.

use_apis_1200_600.jpg

DynamicDocs API uses LaTeX to PDF process to generate dynamic PDFs

The DynamicDocs API provides an alternative to deploying a stand-alone PDF-generating solution which is a viable option for startups and enterprises. The API approach allows developers to test the solution quickly via Postman and generate large amounts of PDF while incorporating graphics and logic into the templates. In the previous article, we introduced a new feature of the API, JSON to PDF Templates, which enable users to generate PDFs using ready-made templates. In this article, we present a specific type of JSON to PDF template called TEX to PDF, which allows users to send their own LaTeX source file and compile it via the API.

What is LaTeX?

LaTeX is a computer language used for document preparation, specifically PDF generation. LaTeX source files have a Tex extension, which are typically compiled into PDFs. Although it is very popular in academia and used for dissertations and journal articles, the language lends itself well to creating great-looking documents in general. One of its advantages is the separation of document content and the rules governing the look and feel of the document. A notable disadvantage of LaTeX is that the learning curve for writing the rules of the document layout can be steep and require a significant investment in time for the user. To circumvent this, DynamicDocs API has a library of ready-made PDF to JSON templates which do not require any knowledge of LaTeX. However, this article assumes that you already have a working Tex file which needs to be compiled.

LaTeX Compilers

To convert LaTeX source files into PDFs, one needs a compiler. DynamicDocs API offers two compilers, namely pdfLaTeX and LuaLaTeX. Tex to PDF Template range consists of two general templates allowing users to upload their own tex file and optionally include Base64 encoded images in the JSON payload. The templates correspond to the two compilers available. For more information on calling the two templates, visit Tex to PDF with pdfLaTeX Template and Tex to PDF with LuaLaTeX Template.

Let's now look at the case when it makes sense to use TEX to PDF conversion with an API.

Considerations for TEX to PDF with DynamicDocs API

The following list explains the criteria for when using DynamicDocs API makes sense for TEX to PDF conversion:

  • You need to generate several PDF documents and want to do it programmatically.
  • You have (or can create) a Tex file which can be adjusted with the dynamic data.
  • You can make a POST request to the API with your TeX file formatted as JSON.

If any of those points do not apply to your use case, you will likely be better off using an online Tex to PDF converter like Overleaf.

Tutorial to Convert TEX to PDF with DynamicDocs API

Consider a situation where you have to create PDF name tags where the underlying data is stored in the system and can be accessed programmatically. The aim is to create a PDF document which looks as follows:

nameTag.png

Example of a name tag we would like to reproduce with LaTeX

To get started with DynamicDocs API, you will need to sign up for an account with ADVICEment.io. Without needing to give bank card information, the new accounts are automatically set up with a FREE plan which offers a limited number of API calls. Once the account email address is confirmed, users can log in and access the Dashboard to get the account API key.

We are now almost ready to make the API call. To create the PDF document above, we have written the following Tex file:

\documentclass[10pt]{article}

\usepackage[paperheight=3in, paperwidth=4in, left=0mm, right=0mm, top=0mm, bottom=0mm, noheadfoot]{geometry}
\usepackage[T1]{fontenc}
\usepackage[sfdefault,lf]{carlito}
\usepackage{graphicx}
\usepackage{ragged2e}
\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[none]{hyphenat}

%%%%%%%%%%%%%%%%%%%%%%% content definition %%%%%%%%%%%%%%%%%%%%%%%
\makeatletter\let\thetitle\@title\makeatother
\usepackage[pdfencoding=auto,unicode, bookmarks=false, colorlinks=false, pdfborder={0 0 0},pdftitle={Name Tag}, pdfauthor={Advicement}, pdfsubject={Name Tag}, pdfkeywords={Name Tag}]{hyperref}

%%%%%%%%%%%%%%%%%%%%%% color definitions %%%%%%%%%%%%%%%%%%%%%%
\definecolor{White}{HTML}{FFFFFF} 
\definecolor{Black}{HTML}{000000} 
\definecolor{AdvGreen}{HTML}{0DBB72} 
\definecolor{AdvGray}{HTML}{383838}
\definecolor{AdvDarkGray}{HTML}{303030}

\begin{document} 
\pagecolor{White}
\begin{tikzpicture}[remember picture,overlay]
\node (rec1) [rectangle, inner sep=0.0cm, outer sep=0, draw = AdvGreen, anchor=north west, fill = AdvGreen, minimum width = 9.16cm, minimum height = 2cm] at ([xshift=0.5cm, yshift=-0.5cm]current page.north west) {}; 
\node (rec2) [rectangle, inner sep=0.0cm, outer sep=0, draw = AdvGreen, anchor=south west, fill = AdvGreen, minimum width = 9.16cm, minimum height = 0.3cm] at ([xshift=0.5cm, yshift=0.5cm]current page.south west) {}; 
\node (image) [anchor=north] at ([xshift=0cm, yshift=-0.4cm]rec1.north) {\advGetImage{key = image1, width=3.5cm, type = png}}; 
\node (name) [anchor=north, inner sep=0.0cm, outer sep=0] at ([xshift=0cm, yshift=-3.75cm]current page.north) {\color{AdvGreen} \bfseries \Huge{Name}};
\node (rec3) [rectangle, inner sep=0.0cm, outer sep=0, draw = AdvGreen, anchor=north, fill = AdvGreen, minimum width = 1cm, minimum height = 0.01cm] at ([xshift=0.0cm, yshift=-0.25cm]name.south) {}; 
\node (role) [anchor=north, inner sep=0.0cm, outer sep=0] at ([xshift=0cm, yshift=-0.25cm]rec3.north) {\color{AdvGreen} \LARGE{Title}};
\end{tikzpicture} 
\end{document}

Changing this Tex file by including different names and titles for each name tag can be done programmatically. Although at first glance, this looks like a normal Tex file, notice the \advGetImage function, which is a custom function used within DynamicDocs API to convert the image from JSON payload and insert it into the file. Notice that it references image1 key in the JSON payload below. For more information on this function, visit our DynamicDocs API documentation page.

Now we are ready to formulate our JSON payload, which looks as follows:

{
"texFileContent": "\\documentclass[10pt]{article}\n\n\\usepackage[paperheight=3in, paperwidth=4in, left=0mm, right=0mm, top=0mm, bottom=0mm, noheadfoot]{geometry}\n\\usepackage[T1]{fontenc}\n\\usepackage[sfdefault,lf]{carlito}\n\\usepackage{graphicx}\n\\usepackage{ragged2e}\n\\usepackage{xcolor}\n\\usepackage{tikz}\n\\usetikzlibrary{calc}\n\\usepackage[none]{hyphenat}\n\n%%%%%%%%%%%%%%%%%%%%%%% content definition %%%%%%%%%%%%%%%%%%%%%%%\n\\makeatletter\\let\\thetitle\\@title\\makeatother\n\\usepackage[pdfencoding=auto,unicode, bookmarks=false, colorlinks=false, pdfborder={0 0 0},pdftitle={Name Tag}, pdfauthor={Advicement}, pdfsubject={Name Tag}, pdfkeywords={Name Tag}]{hyperref}\n\n%%%%%%%%%%%%%%%%%%%%%% color definitions %%%%%%%%%%%%%%%%%%%%%%\n\\definecolor{White}{HTML}{FFFFFF} \n\\definecolor{Black}{HTML}{000000} \n\\definecolor{AdvGreen}{HTML}{0DBB72} \n\\definecolor{AdvGray}{HTML}{383838}\n\\definecolor{AdvDarkGray}{HTML}{303030}\n\n\\begin{document} \n\\pagecolor{White}\n\\begin{tikzpicture}[remember picture,overlay]\n\\node (rec1) [rectangle, inner sep=0.0cm, outer sep=0, draw = AdvGreen, anchor=north west, fill = AdvGreen, minimum width = 9.16cm, minimum height = 2cm] at ([xshift=0.5cm, yshift=-0.5cm]current page.north west) {}; \n\\node (rec2) [rectangle, inner sep=0.0cm, outer sep=0, draw = AdvGreen, anchor=south west, fill = AdvGreen, minimum width = 9.16cm, minimum height = 0.3cm] at ([xshift=0.5cm, yshift=0.5cm]current page.south west) {}; \n\\node (image) [anchor=north] at ([xshift=0cm, yshift=-0.4cm]rec1.north) {\\advGetImage{key = image1, width=3.5cm, type = png}}; \n\\node (name) [anchor=north, inner sep=0.0cm, outer sep=0] at ([xshift=0cm, yshift=-3.75cm]current page.north) {\\color{AdvGreen} \\bfseries \\Huge{Name}};\n\\node (rec3) [rectangle, inner sep=0.0cm, outer sep=0, draw = AdvGreen, anchor=north, fill = AdvGreen, minimum width = 1cm, minimum height = 0.01cm] at ([xshift=0.0cm, yshift=-0.25cm]name.south) {}; \n\\node (role) [anchor=north, inner sep=0.0cm, outer sep=0] at ([xshift=0cm, yshift=-0.25cm]rec3.north) {\\color{AdvGreen} \\LARGE{Title}};\n\\end{tikzpicture} \n\\end{document}",      
"image1": "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"
}

Note that the stringified Tex file has to be put under the texFileContent key in the JSON. Furthermore, the texFileContent value contains double backslashes where single backslashes were previously used in the Tex file. The double backslashes are a result of stringifying the TEX file. Finally, the JSON contains a Base64 encoded image which is referenced in the \advGetImage function above. This allows users to make images dynamic in the documents.

We are now ready to make the API call and POST the JSON above to TEX to PDF with pdfLaTeX template endpoint:

api.advicement.io/v1/templates/pub-tex-to-p..

To do so successfully, you will have to authenticate your API request by including the API key as a header parameter as follows:

Adv-Security-Token - {{Your Account API Key}}

To make the API call above we suggest viewing the DynamicDocs API – Public Workspace via Postman.

The response of the API call is a simple JSON with the location of the Status JSON. To see whether the PDF was generated successfully, we can GET the Status JSON using the URL found in the response. If the PDF is generated successfully, the Status JSON will look as follows and contain the link to download the PDF:

{
"id": "47c2451a-8aa8-47eb-b5db-842dc770b53a",
"startedAt": "Tue Oct 09 2022 19:03:57 GMT+0000 (Coordinated Universal Time)",
"statusCode": 201,
"statusDescription": "document created successfully",
"calculationLogUrl": "https://advicement-prod-api-calls.s3.eu-west-1.amazonaws.com/test/blank-template/47c2451a-8aa8-47eb-b5db-842dc770b53a/output/log/calcLog.txt?AWSAccessKeyId=ASIA2L...",
"latexLogUrl": "https://advicement-prod-api-calls.s3.eu-west-1.amazonaws.com/test/blank-template/47c2451a-8aa8-47eb-b5db-842dc770b53a/output/log/inputFile.log?AWSAccessKeyId=ASIA2L...",
"documentUrl": "https://advicement-prod-api-calls.s3.eu-west-1.amazonaws.com/test/blank-template/47c2451a-8aa8-47eb-b5db-842dc770b53a/output/inputFile.pdf?AWSAccessKeyId=ASIA2L..."
}

We have completed the LaTeX to PDF process using an API. Of course, the Tex file above can be replaced with any working LaTeX source file. The approach above gives developers a powerful option of creating a large variety of different document types.

Final Remarks

As outlined in this article, DynamicDocs API caters for a specific use case when doing TEX to PDF conversion (see the Consideration section to see whether your use case fits). In an event where you have ticked all the conditions, TEX to PDF templates give the option of creating different document types, provided users can create your their own working Tex file and dynamically populate it with their data. DynamicDocs API runs a full TeX Live 2021 Distribution, meaning that users have access to an extensive range of the latest LaTeX packages and fonts. For quick integration, follow the steps above or visit DynamicDocs API – Public Workspace via Postman page.