Aspose.TeX's Output Interface | Java

Si prega di fare riferimento a Aspose.TeX per java riferimento API per definizioni formali di implementazione I/O.

Gli esempi del file system, ZIP e terminale compongono hello-world.tex in XPS. Impostare inputDirectory su una cartella con il file TeX e outputDirectory su una cartella di output esistente. Per l’output ZIP, outputZip deve essere un java.nio.file.Path in una cartella esistente. Importare le classi Aspose.TeX utilizzate nell’esempio scelto, com.aspose.tex.rendering.XpsDevice e le classi necessarie di java.io e java.nio.file. Il metodo chiamante deve gestire o dichiarare le eccezioni. Applicare una licenza come descritto nella guida alle licenze per evitare le limitazioni della versione di valutazione.

Il concetto della directory di output

Poiché i primitivi I/O della lingua tex possono solo affrontare i nomi dei file, Aspose.Tex definisce una directory come una mappatura tra nomi e numeri di dati. I BUSI DEI DATI dovrebbero essere file, flussi, array o qualsiasi altra cosa. L’API ci consente di specificare separatamente le directory di lavoro input e output. Fornisce l’interfaccia generale IoutputworkingDirectory per l’output, che l’utente può implementare per i propri scopi. Fornisce inoltre le proprie implementazioni, che saranno discusse di seguito. L’interfaccia estende IinputWorkingDirectory, poiché il motore può prima creare e scrivere un file, quindi riatterlo. Il metodo dell’interfaccia getouputfile() restituisce il flusso in cui scrivere, al contrario del flusso da leggere restituito da getFile().

Scrivere l’output di file sul file system disco

Come accennato sopra, il valore più comune per la outputworkingdirectory sarebbe probabilmente un’istanza della classe OutputFilesystemDirectory.

Ecco come lo imposteremmo:

 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}

Questo caso d’uso è abbastanza semplice, quindi non ci soffermeremo da molto tempo.

Scrivere l’output di file in un archivio zip

Possiamo anche creare un file (o streaming) e lasciare che il motore TEX lo utilizzi come archivio zip per archiviare i file di output. Ecco qui:

 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}

Innanzitutto, creiamo un flusso di output per il file zip. Quindi, dopo aver creato le opzioni di conversione, impostiamo l’opzione OutputWorkingDirectory per essere un’istanza della classe OutputzipDirectory. L’esempio memorizza hello-world.xps e hello-world.log nell’archivio. Dopo il lavoro, chiamare finish() sulla directory di output prima di chiudere il flusso sottostante. Gli esempi mantengono aperti i flussi e le directory di lavoro fino al termine del lavoro, quindi li chiudono.

Il concetto del terminale di output

C’è un’altra parte importante dell’uscita — l’output del terminale. Per quanto riguarda questo, Aspose.TeX per java definisce l’interfaccia generale IoutPutterminal (11) con due metodi. Uno di questi restituisce un’istanza bufferedwriter. Un altro restituisce un’istanza outputstream come flusso sottostante. Le implementazioni fornite dell’interfaccia sono discusse di seguito.

Scrivere l’output del terminale sulla console

Per fare ciò, dobbiamo impostare l’opzione terminale per essere un’istanza della classe outputConsoleterminal.

 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 è il valore predefinito di questa opzione. L’esempio lo seleziona esplicitamente e scrive l’output del terminale nella console durante la conversione. Tutti e quattro gli esempi vengono eseguiti senza interazione; gli esempi del file system e ZIP acquisiscono l’output del terminale in memoria.

Scrivere l’output del terminale in un file

A differenza del terminale di input, Aspose.TeX per java fornisce un’implementazione di IoutPutterminal, che ci consente di scrivere l’output del terminale in un file in una directory di output.

 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}

Impostare la directory di lavoro di output prima di creare OutputFileTerminal. Scrive l’output del terminale in <job_name>.trm, qui hello-world.trm, in tale directory. Questo file del terminale è distinto dalla trascrizione TeX hello-world.log. Per scrivere l’output del terminale altrove, passare al costruttore un’altra implementazione di IOutputWorkingDirectory.