Гнучке введення TeX і робочі каталоги в Java

Налаштовуйте джерела введення та віртуальні робочі каталоги файлової системи для компіляції документів TeX і LaTeX за допомогою Aspose.TeX для Java. Передавайте вихідні файли TeX, пакети, макроси та вбудовані зображення безпосередньо з локальних файлових систем, стиснених ZIP-архівів або спеціальних потоків у пам’яті без необхідності встановлення настільних дистрибутивів TeX (таких як MiKTeX або TeX Live).

 

Під час компіляції документів TeX або LaTeX рушій потребує доступу до основних вихідних файлів (.tex), пов’язаних підфайлів (\input{} або \include), стилів (.sty), класів (.cls), шрифтів і зображень.

Aspose.TeX для 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 для 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.