Java에서 유연한 TeX 입력 및 작업 디렉터리

Aspose.TeX for Java를 사용하여 TeX 및 LaTeX 문서 컴파일을 위한 입력 소스와 가상 파일 시스템 작업 디렉터리를 구성합니다. 데스크톱 TeX 배포판(MiKTeX 또는 TeX Live 등)을 설치하지 않고도 로컬 파일 시스템, 압축된 ZIP 아카이브 또는 사용자 지정 메모리 내 스트림에서 TeX 소스 파일, 패키지, 매크로 및 포함된 이미지를 직접 전달할 수 있습니다.

 

TeX 또는 LaTeX 문서를 컴파일할 때 엔진은 기본 소스 파일(.tex), 참조된 하위 파일(\input{} 또는 \include), 스타일(.sty), 클래스(.cls), 글꼴 및 이미지에 액세스해야 합니다.

Aspose.TeX for Java는 TeX 입력 소스를 IInputWorkingDirectory 인터페이스로 표현되는 추상화된 작업 디렉터리로 분리합니다:

  • 입력 작업 디렉터리 로컬 파일 시스템InputFileSystemDirectory를 사용하여 디스크 폴더에서 TeX 소스 파일과 리소스를 직접 읽습니다.
  • 입력 작업 디렉터리 ZIP 아카이브InputZipDirectory를 사용하여 모든 종속 항목(.tex, .sty, 이미지)이 하나의 .zip 파일에 저장된 캡슐화된 TeX 컴파일을 읽습니다.
  • 입력 작업 디렉터리 사용자 지정 스트림/메모리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. \input{} 또는 \includegraphics{} 매크로의 상대 경로는 Aspose.TeX에서 어떻게 처리되나요?

LaTeX 문서에 정의된 상대 경로는 활성 IInputWorkingDirectory 인스턴스에 지정된 루트를 기준으로 자동으로 확인됩니다.