Modi alternativi per specificare l’input principale TeX in Java
Esplora modi flessibili per fornire il contenuto sorgente principale TeX e LaTeX al motore di composizione tipografica utilizzando Aspose.TeX for Java. Oltre a caricare file .tex statici da un file system o da un archivio ZIP, gli sviluppatori possono passare direttamente a TeXJob variabili stringa TeX grezze, flussi di memoria, array di byte o reader personalizzati per la compilazione dei documenti in tempo reale e la generazione di report renderizzati sul server.
A seconda dell’architettura della tua applicazione (ad esempio, API REST, pubblicazione basata su database o microservizio cloud), scegli il metodo di input principale più adatto al tuo flusso di lavoro:
- Per i progetti standard basati su file, in cui il file
.texprincipale si trova inIInputWorkingDirectory, utilizza un file denominato come input e la nuova costruzioneTeXJob(‘main’, device, options). - Per la generazione dinamica di documenti dai motori di template, utilizza una stringa come origine dell’input e la nuova costruzione
TeXJob(new StringReader(latexCode), device, options). - Per l’input tramite flusso direttamente da richieste di rete, BLOB di database o archiviazione cloud (S3/GCS), utilizza un
InputStreamcome origine dell’input e la nuova costruzioneTeXJob(inputStream, device, options). - Per l’elaborazione ad alte prestazioni in memoria senza colli di bottiglia dovuti all’I/O su disco, utilizza un buffer di memoria come origine dell’input e la nuova nuova costruzione
TeXJob(new ByteArrayInputStream(bytes), device, options).
Passaggio del codice sorgente TeX come variabile stringa Java
Genera documenti TeX direttamente da stringhe grezze o template di stringhe dinamici senza salvare file .tex temporanei sul 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.");
}
}Passaggio del codice sorgente TeX da un InputStream
Leggi il codice sorgente TeX direttamente dai flussi di input forniti da richieste HTTP, campi di database o pacchetti di risorse.
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.");
}
}Combinazione dell'input tramite flusso con le risorse della directory di lavoro locale
Quando si passa il contenuto TeX principale tramite un flusso o una stringa, le risorse secondarie (come immagini esterne \includegraphics{} o pacchetti di stile \usepackage{}) possono essere comunque risolte da 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.");
}
}Installazione e configurazione
Integra Aspose.TeX for Java nel tuo progetto utilizzando 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>
FAQ
1. È necessario creare file temporanei su disco quando si convertono stringhe LaTeX in PDF?
No. È possibile passare il contenuto della stringa utilizzando StringReader o ByteArrayInputStream direttamente a TeXJob e trasmettere l’output a ByteArrayOutputStream. Ciò consente un’elaborazione al 100% in memoria senza utilizzare il disco.
2. Come vengono risolti i riferimenti relativi ai file all’interno di un sorgente TeX basato su stream?
Quando l’input principale viene passato come stream o stringa, i percorsi relativi all’interno di \input{}, \include{} o \includegraphics{} vengono risolti rispetto alla directory configurata tramite options.setInputWorkingDirectory().
3. Cosa succede alla denominazione dell’output quando l’input viene fornito come stream?
Quando l’input principale è uno stream, Aspose.TeX utilizza il nome del job predefinito (o il nome del job configurato esplicitamente using options.setJobName(‘custom_name’)) per denominare i file PDF/XPS di output e i file di log ausiliari.