Гибкий ввод TeX и рабочие каталоги в Java
Настройте источники входных данных и рабочие каталоги виртуальной файловой системы для компиляции документов TeX и LaTeX с помощью Aspose.TeX for Java. Передавайте исходные файлы TeX, пакеты, макросы и встроенные изображения непосредственно из локальных файловых систем, сжатых ZIP-архивов или пользовательских потоков в памяти без необходимости устанавливать настольные дистрибутивы TeX (например, MiKTeX или TeX Live).
При компиляции документов TeX или LaTeX движку необходим доступ к основным исходным файлам (.tex), связанным подфайлам (\input{} или \include), стилям (.sty), классам (.cls), шрифтам и изображениям.
Aspose.TeX for Java разделяет источники входных данных TeX на абстрактные рабочие каталоги, представленные интерфейсом IInputWorkingDirectory:
- Рабочий каталог входных данных локальная файловая система использует
InputFileSystemDirectoryдля чтения исходных файлов TeX и ресурсов непосредственно из папок на диске. - Рабочий каталог входных данных ZIP-архив использует
InputZipDirectoryдля чтения инкапсулированной компиляции TeX, в которой все зависимости (.tex,.sty, изображения) хранятся в одном файле .zip. - Рабочий каталог входных данных пользовательский поток/память использует
IInputWorkingDirectorдля чтения виртуализированных файловых систем, входных данных BLOB из баз данных или потоков облачного хранилища (S3/Azure Blob)."
Загрузка входных данных TeX из каталога локальной файловой системы
Укажите физическую папку на диске в качестве рабочего каталога входных данных для движка TeX с помощью InputFileSystemDirectory.
import com.aspose.tex.*;
import java.io.IOException;
public class TeXInputFromFileSystem {
public static void main(String[] args) throws IOException {
// Create TeX options for LaTeX format using ObjectTeX engine
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
// Set the input working directory to a local file folder
String inputDirPath = "C:/TeXProject/Input/";
options.setInputWorkingDirectory(new InputFileSystemDirectory(inputDirPath));
// Set output working directory for compiled results (PDF/XPS/Images)
String outputDirPath = "C:/TeXProject/Output/";
options.setOutputWorkingDirectory(new OutputFileSystemDirectory(outputDirPath));
// Run TeX compilation for 'main.tex'
TeXJob job = new TeXJob("main", new PdfDevice(), options);
job.run();
System.out.println("TeX compilation from local directory completed successfully.");
}
}Загрузка входных данных TeX из ZIP-архива
Компилируйте автономные пакеты TeX непосредственно из файла .zip без их распаковки на диск с помощью InputZipDirectory.
import com.aspose.tex.*;
import java.io.FileInputStream;
import java.io.IOException;
public class TeXInputFromZipArchive {
public static void main(String[] args) throws IOException {
// Initialize LaTeX conversion options
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
// Open input ZIP stream containing main.tex, packages, and assets
FileInputStream zipStream = new FileInputStream("C:/TeXProject/ProjectBundle.zip");
// Set input working directory to the ZIP archive stream
options.setInputWorkingDirectory(new InputZipDirectory(zipStream, "subfolder_inside_zip"));
// Define output directory on disk
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Execute TeX job referencing 'main.tex' inside the ZIP
TeXJob job = new TeXJob("main", new PdfDevice(), options);
job.run();
zipStream.close();
System.out.println("TeX compilation directly from ZIP archive completed.");
}
}Передача исходного кода TeX через поток в памяти
Для динамической генерации LaTeX (например, серверной генерации отчетов или динамического рендеринга уравнений) передавайте необработанное строковое содержимое или потоки непосредственно в TeXJob.
import com.aspose.tex.*;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class TeXInputFromMemoryStream {
public static void main(String[] args) throws Exception {
// Create dynamic LaTeX content string
String latexCode = "\\documentclass{article}\n" +
"\\begin{document}\n" +
"\\section{Dynamic Report}\n" +
"Hello World from Aspose.TeX for Java!\n" +
"\\end{document}";
InputStream inputSteam = new ByteArrayInputStream(latexCode.getBytes(StandardCharsets.UTF_8));
// Configure options
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Run job passing stream directly
TeXJob job = new TeXJob(inputSteam, new PdfDevice(), options);
job.run();
System.out.println("Dynamic LaTeX stream successfully compiled to PDF.");
}
}Установка и настройка
Интегрируйте 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. Нужно ли устанавливать MiKTeX, TeX Live или внешние исполняемые двоичные файлы?
Нет. Aspose.TeX for Java — это полностью автономный Java-механизм, который нативно выполняет разбор, набор и рендеринг TeX/LaTeX без необходимости во внешних нативных исполняемых файлах.
2. Можно ли использовать разные источники входных данных для основных файлов и внешней графики/стилей?
Да. Можно задать основной InputWorkingDirectory (например, InputZipDirectory) и настроить вспомогательные пути поиска пакетов/шрифтов с помощью параметров конфигурации TeXOptions.
3. Как Aspose.TeX обрабатывает относительные пути в макросах \input{} или \includegraphics{}?
Относительные пути, определённые в документах LaTeX, автоматически разрешаются относительно корня, указанного активным экземпляром IInputWorkingDirectory.