LaTeX zu PDF | Python

Konvertieren von LaTeX in PDF

Schauen wir uns nun den Python-Code genauer an, der den einfachsten Ansatz zur Konvertierung von LaTeX in das PDF-Format bietet.

Setzen Sie ASPOSE_TEX_INPUT_FILE auf Ihre LaTeX-Datei und ASPOSE_TEX_OUTPUT_DIR auf das Ausgabeverzeichnis, oder ändern Sie die Pfade im Beispiel. Die Standardwerte sind hello-world.ltx und output. Wenden Sie vorher eine Lizenz an. Zusätzliche Eingabedateien werden neben dem Hauptdokument gesucht; die Verarbeitung erfolgt ohne interaktive Eingaben. Lizenzierung

 1# Convert LaTeX to PDF.
 2import os
 3from pathlib import Path
 4from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 5from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 6from aspose.tex.presentation.pdf import PdfDevice, PdfSaveOptions
 7
 8# Set these paths to your LaTeX document and output directory.
 9input_file = Path(os.environ.get("ASPOSE_TEX_INPUT_FILE", "hello-world.ltx")).resolve()
10output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
11if not input_file.is_file():
12    raise FileNotFoundError(input_file)
13output_dir.mkdir(parents=True, exist_ok=True)
14
15# Use the Object LaTeX format and resolve additional inputs beside the main file.
16options = TeXOptions.console_app_options(TeXConfig.object_latex)
17options.input_working_directory = InputFileSystemDirectory(str(input_file.parent))
18options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
19options.interaction = Interaction.NONSTOP_MODE
20options.terminal_out = OutputMemoryTerminal()
21options.save_options = PdfSaveOptions()
22device = PdfDevice()
23job_result = TeXJob(str(input_file), device, options).run()

Zunächst müssen wir eine Instanz der Klasse TeXOptions erstellen. Die Methode console_app_options() ist die einzige statische Methode, die dies erreicht, also machen Sie sich über ihren Namen keine Sorgen. Diese Methode benötigt eine object_latex-Instanz der Klasse TeXConfig, die sich perfekt zum Konvertieren einer LaTeX-Datei eignet. Diese Konfiguration weist die Object-TeX-Engine an, das Object-LaTeX-Format zu laden und sich auf die Verarbeitung der LaTeX-Datei vorzubereiten. Das Object LaTeX-Format ist im Wesentlichen dasselbe wie das LaTeX-Format, verwendet jedoch Object TeX-spezifische Grundelemente, um die Seitenmetriken zu definieren.

Die erste Option, die angegeben werden muss, ist output_working_directory, die den Speicherort bestimmt, an dem die TeX-Ausgabe gespeichert wird. Bei Bedarf finden Sie weitere Informationen zum Konzept des Ausgabeverzeichnisses in Aspose.TeX. In diesem speziellen Fall verwenden wir die Klasse OutputFileSystemDirectory, die es uns ermöglicht, die Ausgabe in ein bestimmtes Verzeichnis oder einen bestimmten Ordner zu schreiben.

Die zweite Option erfordert eine Instanz der Klasse SaveOptions, die bestimmt, wie das Objektmodell in das gewünschte Format umgewandelt wird. In unserem Fall verweist es beim Konvertieren von LaTeX in PDF auf eine Instanz der Klasse PdfSaveOptions.

Um eine im Dateisystem gespeicherte LaTeX-Datei zu konvertieren, müssen wir eine Instanz der Klasse TeXJob mit dem Konstruktor erstellen, der den vollständigen Pfad der Datei als Parameter verwendet. Wenn wir nicht den vollständigen Pfad angeben, sucht die Engine im aktuellen Verzeichnis (dem Arbeitsverzeichnis des Skripts) nach der Datei und findet sie möglicherweise nicht. Wir können die Erweiterung jedoch weglassen, wenn unsere Datei die Erweiterung „.tex“ hat, da die Engine sie automatisch anhängt. Das zweite Argument des Konstruktors ist eine Instanz der Klasse Device. Da wir in unserem Fall LaTeX in PDF konvertieren, handelt es sich um eine Instanz der Klasse PdfDevice. Abschließend übergeben wir als letztes Argument die kürzlich vorbereiteten Konvertierungsoptionen.

Jetzt müssen Sie nur noch den Job ausführen.

Das Beispiel erfasst die Terminalausgabe in OutputMemoryTerminal. Im Ausgabeverzeichnis liegt außerdem ein .log-Protokoll. Bei erfolgreicher Konvertierung sieht es etwa so aus; Versionsangaben können abweichen:

 1This is ObjectTeX, Version 3.1415926-1.0 (Aspose.TeX 21.8)
 2entering extended mode
 3
 4(<input_directory>\hello-world.ltx
 5LaTeX2e <2011/06/27>
 6(article.cls
 7Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
 8(size10.clo))
 9No file hello-world.aux.
10[1]
11(<output_directory>\hello-world.aux) )
12Output written on hello-world.pdf (1 page).
13Transcript written on hello-world.log.

In dem Ordner, den wir als Ausgabeverzeichnis angegeben haben, finden wir neben anderen Ergebnissen der Arbeit der Engine auch die Transkriptdatei und hier ist sie! die Hauptausgabe-PDF-Datei.

Eine alternative Möglichkeit, die Hauptausgabe-PDF-Datei zu schreiben

Die Klasse PdfDevice verfügt über einen weiteren Konstruktor, der es uns ermöglicht, die resultierende PDF-Datei auf andere Weise zu erhalten.

 1# Convert LaTeX to PDF using an explicitly named binary output stream.
 2import os
 3from pathlib import Path
 4from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 5from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 6from aspose.tex.presentation.pdf import PdfDevice, PdfSaveOptions
 7
 8# Set these paths to your LaTeX document and output directory.
 9input_file = Path(os.environ.get("ASPOSE_TEX_INPUT_FILE", "hello-world.ltx")).resolve()
10output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
11if not input_file.is_file():
12    raise FileNotFoundError(input_file)
13output_dir.mkdir(parents=True, exist_ok=True)
14
15# Use the Object LaTeX format and resolve additional inputs beside the main file.
16options = TeXOptions.console_app_options(TeXConfig.object_latex)
17options.input_working_directory = InputFileSystemDirectory(str(input_file.parent))
18options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
19options.interaction = Interaction.NONSTOP_MODE
20options.terminal_out = OutputMemoryTerminal()
21options.save_options = PdfSaveOptions()
22
23# Supply a binary stream to choose the output filename.
24with (output_dir / "any-name.pdf").open("wb") as output_stream:
25    device = PdfDevice(output_stream)
26    job_result = TeXJob(str(input_file), device, options).run()

Der Binärstream schreibt any-name.pdf in das konfigurierte Ausgabeverzeichnis. Es wird keine zusätzliche PDF-Datei mit Standardnamen erzeugt; Hilfsdateien und Protokoll werden weiterhin in output_working_directory gespeichert.

Über Eingabemöglichkeiten

Wenn unsere Haupteingabedatei Abhängigkeiten erfordert, wie z. B. Pakete, die nicht im grundlegenden LaTeX-System enthalten sind, und unterstützte Pakete, ist es notwendig, die Option required_input_directory auf ähnliche Weise festzulegen, wie wir die Option output_working_directory festlegen Platzieren Sie die Abhängigkeiten in diesem Verzeichnis. Die Abhängigkeiten können beliebig in Unterverzeichnissen organisiert werden. Wenn wir darüber hinaus unsere eigenen Dateien in den Schriftsatzprozess einbeziehen möchten, beispielsweise externe Grafikdateien, müssen wir außerdem das input_working_directory festlegen, indem wir den Pfad zum Speicherort dieser Dateien verwenden. Wir können die Haupteingabedatei auch im Eingabeverzeichnis platzieren und den relativen Pfad an den Konstruktor TeXJob angeben oder überhaupt keinen Pfad angeben, wenn sich die Haupteingabedatei im Stammverzeichnis befindet. Weitere Einzelheiten zum Eingabeverzeichniskonzept in Aspose.TeX für Python und den bereitgestellten Implementierungen finden Sie hier.

Es werden auch andere TeX-Joboptionen besprochen.

Sie können auch die kostenlose Web-App für die Konvertierung von LaTeX in PDF erkunden, die mit der Aspose.TeX für .NET API entwickelt wurde.