Asspose.Tex's Input 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 e ZIP compongono hello-world.tex in hello-world.xps. Impostare inputDirectory su una cartella con il file TeX e outputDirectory su una cartella di output esistente. Per l’input ZIP, inputZip deve essere un java.nio.file.Path a un archivio contenente in/hello-world.tex. 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 input

Poiché i primitivi I/O della lingua tex possono solo affrontare i nomi dei file, Aspose.TeX per Java 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 IinputworkingDirectory, che l’utente può implementare per i propri scopi. Fornisce inoltre le proprie implementazioni, che saranno discusse di seguito. L’interfaccia definisce il metodo getFile(), che restituisce il flusso di dati e determina il nome completo del file, pur assumendo un po ‘, ipoteticamente diverso, il nome come il primo argomento, che, in effetti, è il tasto di mappatura.

Ottenere l’input del file dal file system disco

Ecco come lo faremmo:

 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.

Ottenere l’input di file da un archivio con zip

Possiamo anche mettere i file di input in un archivio ZIP e considerarlo una directory di input. In questo caso, dovremmo procedere come segue:

 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}

Innanzitutto, creiamo il flusso contenente il file zip. Quindi, dopo aver creato le opzioni di conversione, impostiamo l’opzione InputWorkingDirectory per essere un’istanza della classe InputZipDirectory. Il secondo argomento del costruttore è il percorso di base all’interno dell’archivio. Se vogliamo che l’intero archivio sia una directory di input, dovremmo passare la stringa vuota. L’esempio mantiene aperti il flusso ZIP e la directory di input fino al termine del lavoro TeX, quindi li chiude. Viene eseguito senza interazione e acquisisce l’output del terminale in memoria.

Il concetto del terminale di input

Ora ricordiamo che c’è anche l’input del terminale. Per quanto riguarda questo, Aspose.TeX per java definisce l’interfaccia generale iinputterminal con due metodi. Uno di questi restituisce un’istanza bufferedReader. Un altro metodo restituisce un inputstream come flusso sottostante. Le implementazioni fornite dell’interfaccia sono discusse di seguito.

Ottenere l’input del terminale dalla console

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

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

InputConsoleTerminal è il valore predefinito di questa opzione. Questo esempio mostra solo la configurazione del terminale e non esegue un lavoro. Un lavoro che richiede input dal terminale necessita di dati dall’utente o di un’implementazione personalizzata del terminale. Gli esempi del file system e ZIP precedenti vengono eseguiti senza interazione con file di input completi.

Teoricamente, se abbiamo un file TEX interattivo (o script) con un comportamento prevedibile, potremmo voler implementare una versione del terminale di input che contiene uno script complementare per rispondere alle richieste del motore TEX. Prova la tua mano quando hai tempo!