Interfaz de entrada de Aspose.TeX | Java

Consulte Aspose.TeX para Java referencia de API para obtener definiciones formales de implementación de E/S.

Los ejemplos de sistema de archivos y ZIP componen hello-world.tex en hello-world.xps. Establezca inputDirectory en una carpeta con el archivo TeX y outputDirectory en una carpeta de salida existente. Para la entrada ZIP, inputZip debe ser un java.nio.file.Path que apunte a un archivo con in/hello-world.tex. Importe las clases Aspose.TeX usadas en el ejemplo seleccionado, com.aspose.tex.rendering.XpsDevice y las clases necesarias de java.io y java.nio.file. El método que llama al ejemplo debe gestionar o declarar las excepciones. Aplique una licencia según la guía de licencias para evitar las restricciones de evaluación.

El concepto del directorio de entrada.

Dado que las primitivas de E/S del lenguaje TeX solo pueden manejar nombres de archivos, Aspose.TeX para Java define un directorio como un mapeo entre nombres y grandes cantidades de datos. Se supone que la gran cantidad de datos son archivos, secuencias, matrices o cualquier otra cosa. La API nos permite especificar los directorios de trabajo de entrada y salida por separado. Proporciona la interfaz general IInputWorkingDirectory, que el usuario puede implementar para sus propios fines. También proporciona sus propias implementaciones, que se analizarán a continuación. La interfaz define el método getFile(), que devuelve el flujo de datos y determina el nombre completo del archivo, mientras toma algún nombre, hipotéticamente diferente, como primer argumento, que, de hecho, es la clave de mapeo. .

Obtener entrada de archivos del sistema de archivos del disco

Así es como lo haríamos:

 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}

Este caso de uso es bastante simple, por lo que no nos detendremos en él por mucho tiempo.

Obtener entrada de archivo desde un archivo ZIP

También podemos poner los archivos de entrada en un archivo ZIP y considerarlo un directorio de entrada. En este caso debemos proceder de la siguiente manera:

 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}

Primero, creamos la secuencia que contiene el archivo ZIP. Luego, después de crear las opciones de conversión, configuramos la opción InputWorkingDirectory para que sea una instancia de la clase InputZipDirectory. El segundo argumento del constructor es la ruta base dentro del archivo. Si queremos que todo el archivo sea un directorio de entrada, debemos pasar la cadena vacía. El ejemplo mantiene abiertos el flujo ZIP y el directorio de entrada hasta que termina el trabajo TeX y después los cierra. Se ejecuta sin interacción y captura la salida del terminal en memoria.

El concepto de terminal de entrada.

Ahora recordemos que también está la entrada del terminal. En cuanto a este, Aspose.TeX para Java define la interfaz general IInputTerminal con dos métodos. Uno de ellos devuelve una instancia BufferedReader. Otro método devuelve un InputStream como flujo subyacente. Las implementaciones proporcionadas de la interfaz se analizan a continuación.

Obtener entrada de terminal desde la consola

Para hacer esto, necesitamos configurar la opción TerminalIn para que sea una instancia de la clase InputConsoleTerminal.

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

InputConsoleTerminal es el valor predeterminado de esta opción. Este ejemplo solo muestra la configuración del terminal y no ejecuta un trabajo. Un trabajo que solicita entrada del terminal necesita datos del usuario o una implementación personalizada del terminal. Los ejemplos de sistema de archivos y ZIP anteriores se ejecutan sin interacción con archivos de entrada completos.

En teoría, si tenemos un archivo (o secuencia de comandos) TeX interactivo con un comportamiento predecible, es posible que deseemos implementar una versión del terminal de entrada que contenga una secuencia de comandos complementaria para responder a las solicitudes del motor TeX. ¡Prueba suerte cuando tengas tiempo!