Autres façons de spécifier l’entrée principale TeX en Java

Découvrez des méthodes flexibles pour fournir le contenu source principal TeX et LaTeX au moteur de composition typographique à l’aide d’Aspose.TeX for Java. Outre le chargement de fichiers .tex statiques depuis un système de fichiers ou une archive ZIP, les développeurs peuvent transmettre directement des variables de chaîne TeX brutes, des flux mémoire, des tableaux d’octets ou des lecteurs personnalisés à TeXJob pour compiler des documents en temps réel et générer des rapports rendus côté serveur.

 

Selon l’architecture de votre application (par exemple, API REST, publication basée sur une base de données ou microservice cloud), choisissez la méthode d’entrée principale qui correspond le mieux à votre flux de travail :

  • Pour les projets standards basés sur des fichiers, où le fichier .tex principal se trouve dans IInputWorkingDirectory, utilisez un fichier nommé comme entrée et la nouvelle construction TeXJob(‘main’, device, options).
  • Pour la génération dynamique de documents à partir de moteurs de modèles, utilisez une chaîne comme source d’entrée et la nouvelle construction TeXJob(new StringReader(latexCode), device, options).
  • Pour une entrée par flux directement depuis des requêtes réseau, des BLOB de base de données ou un stockage cloud (S3/GCS), utilisez un InputStream comme source d’entrée et la nouvelle construction TeXJob(inputStream, device, options).
  • Pour un traitement en mémoire haute performance sans goulots d’étranglement liés aux E/S disque, utilisez un tampon mémoire comme source d’entrée et la nouvelle nouvelle construction TeXJob(new ByteArrayInputStream(bytes), device, options).

Transmettre la source TeX sous forme de variable de chaîne Java

Générez des documents TeX directement à partir de chaînes brutes ou de modèles de chaînes dynamiques sans enregistrer de fichiers .tex temporaires sur le disque.

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

Transmettre la source TeX depuis un InputStream

Lisez le code source TeX directement depuis des flux d’entrée fournis par des requêtes HTTP, des champs de base de données ou des ensembles de ressources.

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

Combiner l’entrée par flux avec les ressources du répertoire de travail local

Lors du passage du contenu TeX principal via un flux ou une chaîne, les ressources secondaires (telles que les images externes \includegraphics{} ou les packages de styles \usepackage{}) peuvent toujours être résolues depuis 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.");
    }
}

Installation et configuration

Intégrez Aspose.TeX for Java à votre projet à l’aide de 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>

Questions fréquentes

1. Dois-je créer des fichiers temporaires sur le disque lors de la conversion de chaînes LaTeX en PDF ?

Non. Vous pouvez transmettre le contenu de la chaîne à l’aide de StringReader ou de ByteArrayInputStream directement à TeXJob et diffuser la sortie vers ByteArrayOutputStream. Cela permet un traitement 100 % en mémoire sans accéder au disque.

2. Comment les références de fichiers relatives dans une source TeX basée sur un flux sont-elles résolues ?

Lorsque l’entrée principale est fournie sous forme de flux ou de chaîne, les chemins relatifs dans \input{}, \include{} ou \includegraphics{} sont résolus par rapport au répertoire configuré via options.setInputWorkingDirectory().

3. Que se passe-t-il concernant le nommage des fichiers de sortie lorsque l’entrée est fournie sous forme de flux ?

Lorsque l’entrée principale est un flux, Aspose.TeX utilise le nom de tâche par défaut (ou le nom de tâche explicitement configuré using options.setJobName(‘custom_name’)) pour nommer les fichiers PDF/XPS de sortie et les fichiers journaux auxiliaires.