Die Ausgabeschnittstelle von Aspose.TeX | Java
Formale Definitionen der I/O-Implementierung finden Sie unter Aspose.TeX für Java API-Referenz.
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// Create conversion options instance.
2...
3// Specify a file system working directory for the output.
4options.setOutputWorkingDirectory(new OutputFileSystemDirectory(Utils.getOutputDirectory()));
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// Open the stream for the ZIP archive that will serve as the output working directory.
2final OutputStream outZipStream = new FileOutputStream(Utils.getOutputDirectory() + "zip-pdf-out.zip");
3{
4 // Create conversion options instance.
5 ...
6 // Specify a ZIP archive working directory for the output.
7 options.setOutputWorkingDirectory(new OutputZipDirectory(outZipStream));
8} finally {
9 if (outZipStream != null)
10 outZipStream.close();
11}
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 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// Create conversion options instance.
2...
3// Specify the console as the input terminal.
4options.setTerminalOut(new OutputConsoleTerminal()); // Default value. Arbitrary assignment.
Auch hier handelt es sich um den Standardwert der Option, sodass keine wirkliche Notwendigkeit besteht, ihn anzugeben. Aus diesem Grund dient dieser Abschnitt nur zu Demonstrationszwecken.
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// Create conversion options instance.
2...
3// Specify that the terminal output must be written to a file in the output working directory.
4// The file name is <job_name>.trm.
5options.setTerminalOut(new OutputFileTerminal(options.getOutputWorkingDirectory()));
Hier bitten wir die TeX-Engine, die Terminalausgabe in die Datei mit dem Namen <job_name>.trm zu schreiben, die im selben Ausgabeverzeichnis gespeichert wird, das wir für den Rest der Ausgabe angegeben haben. Dies ist jedoch nicht notwendig. Wir könnten genauso gut jede andere Instanz einer beliebigen Implementierung von IOutputTerminal an den Konstruktor übergeben.