Альтернативные способы задания основного ввода TeX в Java

Изучите гибкие способы передачи основного исходного содержимого TeX и LaTeX в механизм верстки с помощью Aspose.TeX for Java. Помимо загрузки статических файлов .tex из файловой системы или ZIP-архива, разработчики могут напрямую передавать в TeXJob необработанные строковые переменные TeX, потоки памяти, массивы байтов или пользовательские средства чтения для компиляции документов в реальном времени и создания отчетов, отображаемых на сервере.

 

В зависимости от архитектуры вашего приложения (например, REST API, публикация на основе базы данных или облачный микросервис) выберите метод основного ввода, который лучше всего соответствует вашему рабочему процессу:

  • Для стандартных проектов на основе файлов, в которых основной файл .tex находится в IInputWorkingDirectory, используйте именованный файл в качестве входных данных и новую конструкцию TeXJob(‘main’, device, options).
  • Для динамического создания документов с помощью шаблонизированных движков используйте строку в качестве источника ввода и новую конструкцию TeXJob(new StringReader(latexCode), device, options).
  • Для потокового ввода непосредственно из сетевых запросов, BLOB-объектов базы данных или облачного хранилища (S3/GCS) используйте InputStream в качестве источника ввода и новую конструкцию TeXJob(inputStream, device, options).
  • Для высокопроизводительной обработки в памяти без узких мест, связанных с дисковым вводом-выводом, используйте буфер памяти в качестве источника ввода и новую новую конструкцию TeXJob(new ByteArrayInputStream(bytes), device, options).

Передача исходного кода TeX в виде строковой переменной Java

Создавайте документы TeX непосредственно из необработанных строк или динамических строковых шаблонов без сохранения временных файлов .tex на диске.

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 из InputStream

Читайте исходный код TeX непосредственно из входных потоков, предоставляемых HTTP-запросами, полями базы данных или пакетами ресурсов.

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

Объединение потокового ввода с ресурсами локального рабочего каталога

При передаче основного содержимого TeX через поток или строку вторичные ресурсы (например, внешние изображения \includegraphics{} или пакеты стилей \usepackage{}) по-прежнему могут разрешаться из 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.");
    }
}

Установка и настройка

Интегрируйте Aspose.TeX for Java в свой проект с помощью 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. Нужно ли создавать временные файлы на диске при преобразовании строк LaTeX в PDF?

Нет. Можно передать содержимое строки непосредственно в TeXJob с помощью StringReader или ByteArrayInputStream, а выходные данные передать в ByteArrayOutputStream. Это позволяет выполнять обработку на 100% в памяти без обращения к диску.

2. Как разрешаются относительные ссылки на файлы внутри потокового исходного кода TeX?

Когда основной вход передаётся как поток или строка, относительные пути внутри \input{}, \include{} или \includegraphics{} разрешаются относительно каталога, настроенного через options.setInputWorkingDirectory().

3. Что происходит с именованием выходных данных, когда вход предоставляется как поток?

Когда основной вход является потоком, Aspose.TeX использует имя задания по умолчанию (или явно настроенное имя задания using options.setJobName(‘custom_name’)) для именования выходных файлов PDF/XPS и вспомогательных файлов журналов.