Formas alternativas de especificar la entrada principal de TeX en Java
Explore formas flexibles de proporcionar contenido fuente principal de TeX y LaTeX al motor de composición tipográfica utilizando Aspose.TeX for Java. Además de cargar archivos .tex estáticos desde un sistema de archivos o un archivo ZIP, los desarrolladores pueden pasar variables de cadena TeX sin procesar, flujos de memoria, matrices de bytes o lectores personalizados directamente a TeXJob para la compilación de documentos en tiempo real y la generación de informes renderizados en el servidor.
Según la arquitectura de su aplicación (por ejemplo, API REST, publicación basada en bases de datos o microservicio en la nube), elija el método de entrada principal que mejor se adapte a su flujo de trabajo:
- Para proyectos estándar basados en archivos donde el archivo
.texprincipal se encuentra enIInputWorkingDirectory, utilice un archivo con nombre como entrada y la nueva construcción deTeXJob(‘main’, device, options). - Para la generación dinámica de documentos desde motores de plantillas, utilice una cadena como fuente de entrada y la nueva construcción de
TeXJob(new StringReader(latexCode), device, options). - Para la entrada mediante flujo directamente desde solicitudes de red, BLOB de bases de datos o almacenamiento en la nube (S3/GCS), utilice un
InputStreamcomo fuente de entrada y la nueva construcción deTeXJob(inputStream, device, options). - Para el procesamiento de alto rendimiento en memoria sin cuellos de botella de E/S de disco, utilice un búfer de memoria como fuente de entrada y la nueva nueva construcción de
TeXJob(new ByteArrayInputStream(bytes), device, options).
Pasar el código fuente TeX como una variable de cadena Java
Genere documentos TeX directamente a partir de cadenas sin procesar o plantillas de cadenas dinámicas sin guardar archivos .tex temporales en el disco.
import com.aspose.tex.*;
import java.io.StringReader;
public class TeXInputFromString {
public static void main(String[] args) throws Exception {
// Create a dynamic LaTeX string
String latexContent = "\\documentclass{article}\n" +
"\\begin{document}\n" +
"\\title{Dynamic Invoice}\n" +
"\\author{Automated System}\n" +
"\\maketitle\n" +
"\\section{Summary}\n" +
"This document was compiled directly from a Java String variable.\n" +
"\\end{document}";
// Initialize LaTeX conversion options
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Run TeX job passing StringReader as the main input
TeXJob job = new TeXJob(new StringReader(latexContent), new PdfDevice(), options);
job.run();
System.out.println("Document compiled successfully from String input.");
}
}Pasar el código fuente TeX desde un InputStream
Lea el código fuente TeX directamente desde flujos de entrada proporcionados por solicitudes HTTP, campos de bases de datos o paquetes de recursos.
import com.aspose.tex.*;
import java.io.FileInputStream;
import java.io.InputStream;
public class TeXInputFromInputStream {
public static void main(String[] args) throws Exception {
// Open an input stream from a remote or custom source
InputStream texStream = new FileInputStream("C:/TeXProject/Templates/report.tex");
// Initialize options
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Execute TeX job directly with InputStream
TeXJob job = new TeXJob(texStream, new PdfDevice(), options);
job.run();
texStream.close();
System.out.println("TeX compilation from InputStream finished.");
}
}Combinar la entrada de flujo con recursos del directorio de trabajo local
Al pasar el contenido TeX principal mediante un flujo o una cadena, los recursos secundarios (como imágenes externas \includegraphics{} o paquetes de estilos \usepackage{}) aún pueden resolverse desde un IInputWorkingDirectory.
import com.aspose.tex.*;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
public class TeXStreamWithAssetDirectory {
public static void main(String[] args) throws Exception {
// LaTeX string referencing an external image asset 'logo.png'
String latexCode = "\\documentclass{article}\n" +
"\\usepackage{graphicx}\n" +
"\\begin{document}\n" +
"\\includegraphics{logo.png}\n" +
"\\end{document}";
ByteArrayInputStream inputStream = new ByteArrayInputStream(latexCode.getBytes(StandardCharsets.UTF_8));
// Configure options and set directory for resolving assets (logo.png)
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
options.setInputWorkingDirectory(new InputFileSystemDirectory("C:/TeXProject/Assets/"));
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Run TeX job
TeXJob job = new TeXJob(inputStream, new PdfDevice(), options);
job.run();
System.out.println("Dynamic stream compiled with external assets resolved successfully.");
}
}Instalación y configuración
Integre Aspose.TeX for Java en su proyecto utilizando Maven:
Package Manager Console Command
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-tex</artifactId>
<version>Latest</version>
</dependency>
Preguntas frecuentes
1. ¿Necesito crear archivos temporales en disco al convertir cadenas de LaTeX a PDF?
No. Puede pasar contenido de cadenas mediante StringReader o ByteArrayInputStream directamente a TeXJob y transmitir la salida a ByteArrayOutputStream. Esto permite un procesamiento 100% en memoria sin acceder al disco.
2. ¿Cómo se resuelven las referencias de archivos relativas dentro de una fuente TeX basada en flujos?
Cuando la entrada principal se pasa como un flujo o una cadena, las rutas relativas dentro de \input{}, \include{} o \includegraphics{} se resuelven con respecto al directorio configurado mediante options.setInputWorkingDirectory().
3. ¿Qué sucede con la nomenclatura de salida cuando la entrada se proporciona como un flujo?
Cuando la entrada principal es un flujo, Aspose.TeX utiliza el nombre de trabajo predeterminado (o el nombre de trabajo configurado explícitamente using options.setJobName(‘custom_name’)) para asignar nombres a los archivos PDF/XPS de salida y a los archivos de registro auxiliares.