Альтернативные способы задания основного ввода 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 и вспомогательных файлов журналов.