Eingabeschnittstelle von Aspose.TeX | Java

Formale Definitionen der I/O-Implementierung finden Sie unter Aspose.TeX für Java API-Referenz.

Die Dateisystem- und ZIP-Beispiele setzen hello-world.tex in hello-world.xps. Setzen Sie inputDirectory auf einen Ordner mit der TeX-Datei und outputDirectory auf einen vorhandenen Ausgabeordner. Für ZIP-Eingaben muss inputZip ein java.nio.file.Path zu einem Archiv mit in/hello-world.tex 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 Eingabeverzeichnisses

Da I/O-Grundelemente der TeX-Sprache nur Dateinamen verarbeiten können, definiert Aspose.TeX für Java 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 IInputWorkingDirectory bereit, die der Benutzer für seine eigenen Zwecke implementieren kann. Es bietet auch eigene Implementierungen, die weiter unten besprochen werden. Die Schnittstelle definiert die Methode getFile(), die den Datenstrom zurückgibt und den vollständigen Namen der Datei ermittelt, wobei als erstes Argument ein hypothetisch anderer Name verwendet wird, der tatsächlich der Zuordnungsschlüssel ist .

Dateieingabe vom Festplattendateisystem abrufen

So würden wir es machen:

 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.

Dateieingabe aus einem ZIP-Archiv abrufen

Wir können die Eingabedateien auch in ein ZIP-Archiv legen und es als Eingabeverzeichnis betrachten. In diesem Fall sollten wir wie folgt vorgehen:

 1// Read hello-world.tex from the in/ folder of a ZIP archive.
 2// inputZip is a java.nio.file.Path; outputDirectory is an existing output folder.
 3TeXJobResult result;
 4try (InputStream zipStream = Files.newInputStream(inputZip)) {
 5    TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
 6    InputZipDirectory input = new InputZipDirectory(zipStream, "in");
 7    OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 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    } finally {
16        device.dispose();
17        output.close();
18        input.close();
19    }
20}

Zuerst erstellen wir den Stream, der die ZIP-Datei enthält. Nachdem wir die Konvertierungsoptionen erstellt haben, legen wir dann die Option InputWorkingDirectory als Instanz der Klasse InputZipDirectory fest. Das zweite Argument des Konstruktors ist der Basispfad innerhalb des Archivs. Wenn wir möchten, dass das gesamte Archiv ein Eingabeverzeichnis ist, sollten wir die leere Zeichenfolge übergeben. Das Beispiel hält den ZIP-Stream und das Eingabeverzeichnis bis zum Ende des TeX-Auftrags offen und schließt sie danach. Es läuft ohne Benutzerinteraktion und erfasst die Terminalausgabe im Speicher.

Das Konzept des Eingabeterminals

Denken wir nun daran, dass es auch den Terminaleingang gibt. In diesem Fall definiert Aspose.TeX für Java die allgemeine Schnittstelle IInputTerminal so, dass sie über zwei Methoden verfügt. Einer von ihnen gibt eine BufferedReader-Instanz zurück. Eine andere Methode gibt einen InputStream als zugrunde liegenden Stream zurück. Die bereitgestellten Implementierungen der Schnittstelle werden im Folgenden erläutert.

Terminaleingabe von der Konsole abrufen

Dazu müssen wir die Option TerminalIn als Instanz der Klasse InputConsoleTerminal festlegen.

1// Use the console for terminal input; this is also the default.
2TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
3options.setTerminalIn(new InputConsoleTerminal());

InputConsoleTerminal ist der Standardwert dieser Option. Dieses Beispiel zeigt nur die Terminalkonfiguration und führt keinen Auftrag aus. Ein Auftrag, der Terminaleingaben anfordert, benötigt Benutzereingaben oder eine eigene Terminalimplementierung. Die Dateisystem- und ZIP-Beispiele oben werden ohne Benutzerinteraktion mit vollständigen Eingabedateien ausgeführt.

Wenn wir eine interaktive TeX-Datei (oder ein interaktives Skript) mit vorhersehbarem Verhalten haben, möchten wir theoretisch möglicherweise eine Version des Eingabeterminals implementieren, die ein ergänzendes Skript zur Beantwortung der Anforderungen der TeX-Engine enthält. Versuchen Sie es, wenn Sie Zeit haben!