使用 Java 在 LaTeX 文档中嵌入图形

使用 Aspose.TeX for Java 将高分辨率栅格图像(PNG、JPEG、BMP)和矢量图形(EPS、PDF)嵌入 LaTeX 文档。通过使用 graphicx 等原生 LaTeX 宏包并配置输入工作目录,开发人员可以无缝编译包含嵌入式图表、图形、照片和矢量图形的文档,并生成可用于出版的 PDF、XPS 和图像输出。

 

在编译包含图形元素的 LaTeX 文档时,Aspose.TeX for Java 会根据配置的 IInputWorkingDirectory 解析所引用的图像文件。

  • 对于照片、栅格屏幕截图和 Web 图形,请选择 PNG/JPEG 格式,并使用 \usepackage{graphicx} - \includegraphics{figure.png} 命令嵌入。
  • 对于高精度矢量图表以及 CAD/科学绘图,请选择 EPS 格式,并使用 \usepackage{graphicx} - \includegraphics{diagram.eps} 命令嵌入。
  • 对于旧版位图图像嵌入,请选择 BMP/TIFF 格式,并使用 \usepackage{graphicx} - \includegraphics{image.bmp} 命令嵌入。

在 LaTeX 中嵌入栅格图像(PNG/JPEG)

要嵌入标准栅格图像,请在 LaTeX 文档的导言区中包含 graphicx 宏包,并在 \includegraphics{} 中指定目标图像文件名。

import com.aspose.tex.*;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;

public class EmbedRasterGraphicsInLaTeX {
    public static void main(String[] args) throws Exception {
        // Create LaTeX document string referencing an image file 'sample.png'
        String latexCode = "\\documentclass{article}\n" +
                           "\\usepackage{graphicx}\n" +
                           "\\begin{document}\n" +
                           "\\section{Graphics Rendering Demo}\n" +
                           "Here is an embedded raster image:\n\n" +
                           "\\begin{figure}[h]\n" +
                           "  \\centering\n" +
                           "  \\includegraphics[width=0.5\\textwidth]{sample.png}\n" +
                           "  \\caption{Sample PNG Image in LaTeX}\n" +
                           "\\end{figure}\n" +
                           "\\end{document}";

        ByteArrayInputStream inputStream = new ByteArrayInputStream(latexCode.getBytes(StandardCharsets.UTF_8));

        // Initialize conversion options for ObjectLaTeX
        TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());

        // Set input working directory where 'sample.png' is located
        options.setInputWorkingDirectory(new InputFileSystemDirectory("C:/TeXProject/Images/"));

        // Set output working directory for compiled PDF
        options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));

        // Execute TeX job
        TeXJob job = new TeXJob(inputStream, new PdfDevice(), options);
        job.run();

        System.out.println("LaTeX document with embedded PNG successfully compiled to PDF.");
    }
}

在 LaTeX 中嵌入矢量图形(EPS)

Aspose.TeX 在通过 ObjectLaTeX 格式引擎进行编译时,可以原生处理 Encapsulated PostScript(.eps)图形。

import com.aspose.tex.*;
import java.io.IOException;

public class EmbedEPSGraphicsInLaTeX {
    public static void main(String[] args) throws IOException {
        // Initialize options for LaTeX format engine
        TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());

        // Configure directory paths containing .tex source and .eps graphics
        options.setInputWorkingDirectory(new InputFileSystemDirectory("C:/TeXProject/SourceWithEPS/"));
        options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));

        // Run job for 'document_with_eps.tex' containing \includegraphics{vector_chart.eps}
        TeXJob job = new TeXJob("document_with_eps", new PdfDevice(), options);
        job.run();

        System.out.println("LaTeX document with vector EPS figure compiled successfully.");
    }
}

从 ZIP 存档加载图形资源

将 TeX 源文件、宏包和动态图像打包到一个 .zip 存档中,并指示 Aspose.TeX 直接从内存或压缩存储中解析图形依赖项。

import com.aspose.tex.*;
import java.io.FileInputStream;

public class EmbedGraphicsFromZip {
    public static void main(String[] args) throws Exception {
        // Initialize LaTeX engine options
        TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());

        // Open input ZIP archive containing 'main.tex' and 'figure.png'
        FileInputStream zipStream = new FileInputStream("C:/TeXProject/ProjectWithAssets.zip");
        options.setInputWorkingDirectory(new InputZipDirectory(zipStream, "src"));

        // Define output destination
        options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));

        // Run compilation job
        TeXJob job = new TeXJob("main", new PdfDevice(), options);
        job.run();

        zipStream.close();
        System.out.println("Compiled LaTeX document with images embedded directly from ZIP file.");
    }
}

安装和设置

使用 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. 如果我没有在 TeXOptions 中指定作业名称,会发生什么?

如果未通过 setJobName() 明确配置作业名称,Aspose.TeX 将默认使用主输入文件名(例如,main.tex 会生成 main.pdfmain.log)。

2. 如何完全禁用编译 .log 文件的创建?

在创建并运行 TeXJob 之前设置 options.setLogOutput(false)。这样可以防止引擎在磁盘或输出工作目录中生成辅助日志文件。

3. 我可以在服务器/无头环境中捕获 TeX 终端消息吗?

可以。分配自定义 OutputMemoryTerminal 或实现 IOutputTerminal,即可将所有终端 stdout/stderr 消息路由到服务器的企业级日志系统(例如 Log4j 或 SLF4J)。