Альтернативні способи визначення основного введення TeX у Java
Досліджуйте гнучкі способи передавання основного вихідного вмісту TeX і LaTeX до механізму верстки за допомогою Aspose.TeX for Java. Окрім завантаження статичних файлів .tex із файлової системи або ZIP-архіву, розробники можуть безпосередньо передавати необроблені рядкові змінні TeX, потоки пам’яті, масиви байтів або спеціальні засоби читання до TeXJob для компіляції документів у реальному часі та створення звітів на стороні сервера.
Залежно від архітектури вашого застосунку (наприклад, REST API, публікація на основі бази даних, хмарний мікросервіс) виберіть метод основного введення, який найкраще відповідає вашому робочому процесу:
- Для стандартних проєктів на основі файлів, де основний файл
.texзнаходиться вIInputWorkingDirectory, використовуйте іменований файл як вхідні дані та нову конструкціюTeXJob(‘main’, device, options). - Для динамічного створення документів із шаблонних механізмів використовуйте рядок як джерело вхідних даних і нову конструкцію
TeXJob(new StringReader(latexCode), device, options). - Для потокового введення безпосередньо з мережевих запитів, BLOB-об’єктів бази даних або хмарного сховища (S3/GCS) використовуйте
InputStreamяк джерело вхідних даних і нову конструкціюTeXJob(inputStream, device, options). - Для високопродуктивної обробки в пам’яті без вузьких місць, пов’язаних із дисковим I/O, використовуйте буфер пам’яті як джерело вхідних даних і нову конструкцію
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 та додаткових файлів журналу.