Formas alternativas de especificar a entrada principal do TeX em Java

Explore formas flexíveis de fornecer conteúdo de origem principal do TeX e LaTeX ao mecanismo de composição tipográfica usando o Aspose.TeX for Java. Além de carregar arquivos .tex estáticos de um sistema de arquivos ou arquivo ZIP, os desenvolvedores podem passar variáveis de string TeX brutas, fluxos de memória, matrizes de bytes ou leitores personalizados diretamente para o TeXJob para compilação de documentos em tempo real e geração de relatórios renderizados no servidor.

 

Dependendo da arquitetura da sua aplicação (por exemplo, API REST, publicação orientada por banco de dados ou microsserviço na nuvem), escolha o método de entrada principal que melhor se adapta ao seu fluxo de trabalho:

  • Para projetos padrão baseados em arquivos, nos quais o arquivo .tex principal está localizado em IInputWorkingDirectory, use um arquivo nomeado como entrada e a nova construção TeXJob(‘main’, device, options).
  • Para a geração dinâmica de documentos a partir de mecanismos de modelos, use uma string como fonte de entrada e a nova construção TeXJob(new StringReader(latexCode), device, options).
  • Para entrada por fluxo diretamente de solicitações de rede, BLOBs de banco de dados ou armazenamento em nuvem (S3/GCS), use um InputStream como fonte de entrada e a nova construção TeXJob(inputStream, device, options).
  • Para processamento de alto desempenho em memória sem gargalos de E/S de disco, use um buffer de memória como fonte de entrada e a nova nova construção TeXJob(new ByteArrayInputStream(bytes), device, options).

Passar a origem TeX como uma variável de string Java

Gere documentos TeX diretamente a partir de strings brutas ou modelos de strings dinâmicos sem salvar arquivos .tex temporários no 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.");
    }
}

Passar a origem TeX de um InputStream

Leia o código-fonte TeX diretamente de fluxos de entrada fornecidos por solicitações HTTP, campos de banco de dados ou pacotes 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 entrada por fluxo com recursos do diretório de trabalho local

Ao passar o conteúdo TeX principal por meio de um fluxo ou string, os recursos secundários (como imagens externas \includegraphics{} ou pacotes de estilo \usepackage{}) ainda podem ser resolvidos a partir de um 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.");
    }
}

Instalação e configuração

Integre o Aspose.TeX for Java ao seu projeto usando o 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. Preciso criar arquivos temporários no disco ao converter strings LaTeX para PDF?

Não. Você pode passar o conteúdo da string usando StringReader ou ByteArrayInputStream diretamente para TeXJob e transmitir a saída para ByteArrayOutputStream. Isso permite um processamento 100% em memória sem tocar no disco.

2. Como as referências relativas a arquivos dentro de uma fonte TeX baseada em stream são resolvidas?

Quando a entrada principal é passada como stream ou string, os caminhos relativos dentro de \input{}, \include{} ou \includegraphics{} são resolvidos em relação ao diretório configurado por options.setInputWorkingDirectory().

3. O que acontece com a nomenclatura da saída quando a entrada é fornecida como stream?

Quando a entrada principal é um stream, o Aspose.TeX usa o nome de job padrão (ou o nome de job configurado explicitamente using options.setJobName(‘custom_name’)) para nomear os arquivos PDF/XPS de saída e os arquivos de log auxiliares.