Java에서 TeX 메인 입력을 지정하는 대체 방법
Aspose.TeX for Java를 사용하여 TeX 및 LaTeX 소스 콘텐츠를 조판 엔진에 유연하게 전달하는 방법을 알아보세요. 개발자는 파일 시스템이나 ZIP 아카이브에서 정적 .tex 파일을 로드하는 것 외에도 원시 TeX 문자열 변수, 메모리 스트림, 바이트 배열 또는 사용자 지정 리더를 TeXJob에 직접 전달하여 실시간 문서 컴파일 및 서버 렌더링 보고서 생성을 수행할 수 있습니다.
애플리케이션 아키텍처(예: REST API, 데이터베이스 기반 게시 또는 클라우드 마이크로서비스)에 따라 워크플로에 가장 적합한 메인 입력 방법을 선택하세요:
- 메인
.tex파일이IInputWorkingDirectory에 있는 표준 파일 기반 프로젝트의 경우, 이름이 지정된 파일을 입력으로 사용하고 새로운TeXJob(‘main’, device, options) 생성 방식을 사용하세요. - 템플릿 엔진에서 동적으로 문서를 생성하는 경우 문자열을 입력 소스로 사용하고 새로운
TeXJob(new StringReader(latexCode), device, options) 생성 방식을 사용하세요. - 네트워크 요청, 데이터베이스 BLOB 또는 클라우드 스토리지(S3/GCS)에서 직접 스트리밍 입력을 받는 경우
InputStream을 입력 소스로 사용하고 새로운TeXJob(inputStream, device, options) 생성 방식을 사용하세요. - 디스크 I/O 병목 없이 고성능 인메모리 처리를 수행하려면 메모리 버퍼를 입력 소스로 사용하고 새로운 새로운
TeXJob(new ByteArrayInputStream(bytes), device, options) 생성 방식을 사용하세요.
Java 문자열 변수로 TeX 소스 전달
임시 .tex 파일을 디스크에 저장하지 않고 원시 문자열이나 동적 문자열 템플릿에서 직접 TeX 문서를 생성하세요.
import com.aspose.tex.*;
import java.io.StringReader;
public class TeXInputFromString {
public static void main(String[] args) throws Exception {
// Create a dynamic LaTeX string
String latexContent = "\\documentclass{article}\n" +
"\\begin{document}\n" +
"\\title{Dynamic Invoice}\n" +
"\\author{Automated System}\n" +
"\\maketitle\n" +
"\\section{Summary}\n" +
"This document was compiled directly from a Java String variable.\n" +
"\\end{document}";
// Initialize LaTeX conversion options
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Run TeX job passing StringReader as the main input
TeXJob job = new TeXJob(new StringReader(latexContent), new PdfDevice(), options);
job.run();
System.out.println("Document compiled successfully from String input.");
}
}InputStream에서 TeX 소스 전달
HTTP 요청, 데이터베이스 필드 또는 리소스 번들에서 제공되는 입력 스트림을 통해 TeX 소스 코드를 직접 읽으세요.
import com.aspose.tex.*;
import java.io.FileInputStream;
import java.io.InputStream;
public class TeXInputFromInputStream {
public static void main(String[] args) throws Exception {
// Open an input stream from a remote or custom source
InputStream texStream = new FileInputStream("C:/TeXProject/Templates/report.tex");
// Initialize options
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Execute TeX job directly with InputStream
TeXJob job = new TeXJob(texStream, new PdfDevice(), options);
job.run();
texStream.close();
System.out.println("TeX compilation from InputStream finished.");
}
}스트림 입력과 로컬 작업 디렉터리의 리소스 결합
TeX 메인 콘텐츠를 스트림이나 문자열을 통해 전달하는 경우에도 보조 리소스(예: 외부 이미지 \includegraphics{} 또는 스타일 패키지 \usepackage{})는 여전히 IInputWorkingDirectory에서 확인할 수 있습니다.
import com.aspose.tex.*;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
public class TeXStreamWithAssetDirectory {
public static void main(String[] args) throws Exception {
// LaTeX string referencing an external image asset 'logo.png'
String latexCode = "\\documentclass{article}\n" +
"\\usepackage{graphicx}\n" +
"\\begin{document}\n" +
"\\includegraphics{logo.png}\n" +
"\\end{document}";
ByteArrayInputStream inputStream = new ByteArrayInputStream(latexCode.getBytes(StandardCharsets.UTF_8));
// Configure options and set directory for resolving assets (logo.png)
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
options.setInputWorkingDirectory(new InputFileSystemDirectory("C:/TeXProject/Assets/"));
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Run TeX job
TeXJob job = new TeXJob(inputStream, new PdfDevice(), options);
job.run();
System.out.println("Dynamic stream compiled with external assets resolved successfully.");
}
}설치 및 설정
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. LaTeX 문자열을 PDF로 변환할 때 임시 디스크 파일을 생성해야 하나요?
아니요. StringReader 또는 ByteArrayInputStream을 사용하여 문자열 콘텐츠를 TeXJob에 직접 전달하고 출력을 ByteArrayOutputStream으로 스트리밍할 수 있습니다. 이를 통해 디스크를 사용하지 않고 100% 메모리 내에서 처리할 수 있습니다.
2. 스트림 기반 TeX 소스 내부의 상대 파일 참조는 어떻게 확인되나요?
주 입력이 스트림 또는 문자열로 전달되는 경우 \input{}, \include{} 또는 \includegraphics{} 내부의 상대 경로는 options.setInputWorkingDirectory()를 통해 구성된 디렉터리를 기준으로 확인됩니다.
3. 입력이 스트림으로 제공될 때 출력 이름은 어떻게 지정되나요?
주 입력이 스트림인 경우 Aspose.TeX는 기본 작업 이름(또는 명시적으로 구성된 작업 이름 using options.setJobName(‘custom_name’))을 사용하여 출력 PDF/XPS 파일과 보조 로그 파일의 이름을 지정합니다.