Alternative Möglichkeiten zur Angabe der TeX-Haupteingabe in Java

Entdecken Sie flexible Möglichkeiten, TeX- und LaTeX-Quellinhalte als Haupteingabe in die Satz-Engine mit Aspose.TeX for Java einzuspeisen. Neben dem Laden statischer .tex-Dateien aus einem Dateisystem oder ZIP-Archiv können Entwickler rohe TeX-String-Variablen, Speicherstreams, Byte-Arrays oder benutzerdefinierte Reader direkt an TeXJob übergeben, um Dokumente in Echtzeit zu kompilieren und serverseitig gerenderte Berichte zu erstellen.

 

Wählen Sie je nach Ihrer Anwendungsarchitektur (z. B. REST-API, datenbankgestütztes Publishing oder Cloud-Microservice) die Haupteingabemethode, die am besten zu Ihrem Workflow passt:

  • Für standardmäßige dateibasierte Projekte, bei denen sich die zentrale .tex-Datei in IInputWorkingDirectory befindet, verwenden Sie eine benannte Datei als Eingabe und die neue TeXJob(‘main’, device, options)-Konstruktion.
  • Für die dynamische Dokumentgenerierung aus Template-Engines verwenden Sie einen String als Eingabequelle und die neue TeXJob(new StringReader(latexCode), device, options)-Konstruktion.
  • Für die direkte Stream-Eingabe aus Netzwerkanfragen, Datenbank-BLOBs oder Cloud-Speicher (S3/GCS) verwenden Sie einen InputStream als Eingabequelle und die neue TeXJob(inputStream, device, options)-Konstruktion.
  • Für die hochperformante Verarbeitung im Speicher ohne durch Festplatten-I/O verursachte Engpässe verwenden Sie einen Speicherpuffer als Eingabequelle und die neue neue TeXJob(new ByteArrayInputStream(bytes), device, options)-Konstruktion.

TeX-Quelltext als Java-String-Variable übergeben

Erstellen Sie TeX-Dokumente direkt aus rohen Strings oder dynamischen String-Vorlagen, ohne temporäre .tex-Dateien auf der Festplatte zu speichern.

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.");
    }
}

TeX-Quelle aus einem InputStream übergeben

Lesen Sie TeX-Quellcode direkt aus Eingabestreams, die von HTTP-Anfragen, Datenbankfeldern oder Ressourcenpaketen bereitgestellt werden.

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.");
    }
}

Stream-Eingabe mit Assets aus einem lokalen Arbeitsverzeichnis kombinieren

Beim Übergeben des TeX-Hauptinhalts über einen Stream oder String können sekundäre Assets (z. B. externe Bilder \includegraphics{} oder Stilpakete \usepackage{}) weiterhin aus einem IInputWorkingDirectory aufgelöst werden.

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.");
    }
}

Installation und Einrichtung

Integrieren Sie Aspose.TeX for Java mithilfe von Maven in Ihr Projekt:

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>

Häufig gestellte Fragen

1. Muss ich beim Konvertieren von LaTeX-Zeichenfolgen in PDF temporäre Dateien auf dem Datenträger erstellen?

Nein. Sie können den Zeichenfolgeninhalt mit StringReader oder ByteArrayInputStream direkt an TeXJob übergeben und die Ausgabe an ByteArrayOutputStream streamen. Dadurch ist eine 100%ige Verarbeitung im Arbeitsspeicher möglich, ohne auf den Datenträger zuzugreifen.

2. Wie werden relative Dateireferenzen innerhalb einer streambasierten TeX-Quelle aufgelöst?

Wenn die Haupteingabe als Stream oder Zeichenfolge übergeben wird, werden relative Pfade innerhalb von \input{}, \include{} oder \includegraphics{} relativ zu dem über options.setInputWorkingDirectory() konfigurierten Verzeichnis aufgelöst.

3. Was passiert mit der Ausgabebenennung, wenn die Eingabe als Stream bereitgestellt wird?

Wenn die Haupteingabe ein Stream ist, verwendet Aspose.TeX den standardmäßigen Auftragsnamen (oder den explizit konfigurierten Auftragsnamen using options.setJobName(‘custom_name’)) zur Benennung der ausgegebenen PDF/XPS-Dateien und der Hilfsprotokolldateien.