Die Ausgabeschnittstelle von Aspose.TeX | Java
Formale Definitionen der I/O-Implementierung finden Sie unter Aspose.TeX für Java API-Referenz.
Die Dateisystem-, ZIP- und Terminalbeispiele setzen hello-world.tex in XPS. Setzen Sie inputDirectory auf einen Ordner mit der TeX-Datei und outputDirectory auf einen vorhandenen Ausgabeordner. Für ZIP-Ausgaben muss outputZip ein java.nio.file.Path in einem vorhandenen Ordner sein. Importieren Sie die im gewählten Beispiel verwendeten Aspose.TeX-Klassen, com.aspose.tex.rendering.XpsDevice und die erforderlichen Klassen aus java.io und java.nio.file. Die aufrufende Methode muss Ausnahmen behandeln oder deklarieren. Wenden Sie eine Lizenz gemäß dem
Lizenzleitfaden an, um Einschränkungen der Evaluierung zu vermeiden.
Das Konzept des Ausgabeverzeichnisses
Da I/O-Grundelemente der TeX-Sprache nur Dateinamen verarbeiten können, definiert Aspose.TeX ein Verzeichnis als Zuordnung zwischen Namen und Datenmengen. Die Datenmengen sollen Dateien, Streams, Arrays oder was auch immer sein. Mit der API können wir die Eingabe- und Ausgabearbeitsverzeichnisse separat angeben. Es stellt die allgemeine Schnittstelle IOutputWorkingDirectory für die Ausgabe bereit, die der Benutzer für seine eigenen Zwecke implementieren kann. Es bietet auch eigene Implementierungen, die weiter unten besprochen werden. Die Schnittstelle erweitert IInputWorkingDirectory, da die Engine zunächst eine Datei erstellen und schreiben und diese dann zurücklesen kann. Die eigene Methode der Schnittstelle getOuputFile() gibt den Stream zurück, in den geschrieben werden soll, im Gegensatz zu dem Stream zum Lesen, der von getFile() zurückgegeben wird.
Schreiben der Dateiausgabe in das Festplattendateisystem
Wie wir oben erwähnt haben, wäre der häufigste Wert für OutputWorkingDirectory wahrscheinlich eine Instanz der Klasse OutputFileSystemDirectory.
So würden wir es einstellen:
1// inputDirectory contains hello-world.tex; outputDirectory is an existing output folder.
2TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
3InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
5options.setInputWorkingDirectory(input);
6options.setOutputWorkingDirectory(output);
7options.setInteraction(Interaction.NonstopMode);
8options.setTerminalOut(new OutputMemoryTerminal());
9
10XpsDevice device = new XpsDevice();
11TeXJobResult result;
12try {
13 result = new TeXJob("hello-world", device, options).run();
14} finally {
15 device.dispose();
16 output.close();
17 input.close();
18}Dieser Anwendungsfall ist recht einfach, daher werden wir uns nicht lange damit befassen.
Dateiausgabe in ein ZIP-Archiv schreiben
Wir können auch eine Datei (oder einen Stream) erstellen und diese von der TeX-Engine als ZIP-Archiv zum Speichern der Ausgabedateien verwenden lassen. Hier ist es:
1// Store the XPS document and TeX transcript in a ZIP archive.
2// inputDirectory contains hello-world.tex; outputZip is the java.nio.file.Path to create.
3TeXJobResult result;
4try (OutputStream zipStream = Files.newOutputStream(outputZip)) {
5 TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
6 InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
7 OutputZipDirectory output = new OutputZipDirectory(zipStream);
8 options.setInputWorkingDirectory(input);
9 options.setOutputWorkingDirectory(output);
10 options.setInteraction(Interaction.NonstopMode);
11 options.setTerminalOut(new OutputMemoryTerminal());
12 XpsDevice device = new XpsDevice();
13 try {
14 result = new TeXJob("hello-world", device, options).run();
15 // Finalize the archive while its underlying stream is still open.
16 output.finish();
17 } finally {
18 device.dispose();
19 output.close();
20 input.close();
21 }
22}Zuerst erstellen wir einen Ausgabestream für die ZIP-Datei. Nachdem wir die Konvertierungsoptionen erstellt haben, legen wir dann die Option
OutputWorkingDirectory als Instanz der Klasse
OutputZipDirectory fest. Das Beispiel speichert hello-world.xps und hello-world.log im Archiv. Rufen Sie nach dem Auftrag finish() für das Ausgabeverzeichnis auf, bevor Sie den zugrunde liegenden Stream schließen. Die Beispiele halten Streams und Arbeitsverzeichnisse bis zum Ende des Auftrags offen und schließen sie danach.
Das Konzept des Ausgabeterminals
Es gibt noch einen weiteren wichtigen Teil der Ausgabe: die Terminalausgabe. In diesem Fall definiert Aspose.TeX für Java die allgemeine Schnittstelle IOutputTerminal so, dass sie über zwei Methoden verfügt. Einer von ihnen gibt eine BufferedWriter-Instanz zurück. Ein anderer gibt eine OutputStream-Instanz als zugrunde liegenden Stream zurück. Die bereitgestellten Implementierungen der Schnittstelle werden im Folgenden erläutert.
Schreiben der Terminalausgabe in die Konsole
Dazu müssen wir die Option TerminalOut als Instanz der Klasse OutputConsoleTerminal festlegen.
1// inputDirectory contains hello-world.tex; outputDirectory is an existing output folder.
2TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
3InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
5options.setInputWorkingDirectory(input);
6options.setOutputWorkingDirectory(output);
7options.setInteraction(Interaction.NonstopMode);
8// This is also the default output terminal.
9options.setTerminalOut(new OutputConsoleTerminal());
10
11XpsDevice device = new XpsDevice();
12TeXJobResult result;
13try {
14 result = new TeXJob("hello-world", device, options).run();
15} finally {
16 device.dispose();
17 output.close();
18 input.close();
19}OutputConsoleTerminal ist der Standardwert dieser Option. Das Beispiel wählt ihn ausdrücklich aus und schreibt während der Konvertierung die Terminalausgabe in die Konsole. Alle vier Beispiele laufen ohne Benutzerinteraktion; die Dateisystem- und ZIP-Beispiele erfassen die Terminalausgabe im Speicher.
Terminalausgabe in eine Datei schreiben
Im Gegensatz zum Eingabeterminal bietet Aspose.TeX für Java eine Implementierung von IOutputTerminal, die es uns ermöglicht, die Terminalausgabe in eine Datei in einem Ausgabeverzeichnis zu schreiben.
1// inputDirectory contains hello-world.tex; outputDirectory is an existing output folder.
2TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
3InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
5options.setInputWorkingDirectory(input);
6options.setOutputWorkingDirectory(output);
7options.setInteraction(Interaction.NonstopMode);
8// Set the output directory first: the terminal writes <job_name>.trm there.
9options.setTerminalOut(new OutputFileTerminal(options.getOutputWorkingDirectory()));
10
11XpsDevice device = new XpsDevice();
12TeXJobResult result;
13try {
14 result = new TeXJob("hello-world", device, options).run();
15} finally {
16 device.dispose();
17 output.close();
18 input.close();
19}Legen Sie das Ausgabearbeitsverzeichnis fest, bevor Sie OutputFileTerminal erstellen. Die Terminalausgabe wird dort in
<job_name>.trm geschrieben, hier hello-world.trm. Diese Terminaldatei ist vom TeX-Protokoll hello-world.log getrennt. Um die Terminalausgabe an einen anderen Ort zu schreiben, übergeben Sie dem Konstruktor eine andere
IOutputWorkingDirectory-Implementierung.