Java 中灵活的 TeX 输入和工作目录

使用 Aspose.TeX for Java 配置用于 TeX 和 LaTeX 文档编译的输入源和虚拟文件系统工作目录。直接从本地文件系统、压缩 ZIP 存档或自定义内存流传递 TeX 源文件、包、宏和嵌入式图像,无需安装桌面 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 输入

使用 InputFileSystemDirectory 将物理磁盘文件夹指定为 TeX 引擎的输入工作目录。

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.");
    }
}

从 ZIP 存档加载 TeX 输入

使用 InputZipDirectory 直接从 .zip 文件编译自包含的 TeX 包,而无需将其解压到磁盘。

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.");
    }
}

安装和设置

使用 Maven 将 Aspose.TeX for Java 集成到您的项目中:

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 实例指定的根目录进行解析。