Гибкий ввод 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.