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 .tex principale si trova in IInputWorkingDirectory, utilizza un file denominato come input e la nuova costruzione TeXJob(‘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 InputStream come origine dell’input e la nuova costruzione TeXJob(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.