Các cách thay thế để chỉ định đầu vào TeX chính trong Java
Khám phá các cách linh hoạt để cung cấp nội dung mã nguồn TeX và LaTeX chính cho công cụ dàn trang bằng Aspose.TeX for Java. Ngoài việc tải các tệp .tex tĩnh từ hệ thống tệp hoặc kho lưu trữ ZIP, nhà phát triển có thể truyền trực tiếp các biến chuỗi TeX thô, luồng bộ nhớ, mảng byte hoặc trình đọc tùy chỉnh vào TeXJob để biên dịch tài liệu theo thời gian thực và tạo báo cáo phía máy chủ.
Tùy thuộc vào kiến trúc ứng dụng của bạn (ví dụ: REST API, xuất bản dựa trên cơ sở dữ liệu, microservice đám mây), hãy chọn phương thức nhập chính phù hợp nhất với quy trình làm việc của bạn:
- Đối với các dự án dựa trên tệp tiêu chuẩn, trong đó tệp
.texchính nằm trongIInputWorkingDirectory, hãy sử dụng tệp được đặt tên làm đầu vào và cấu trúcTeXJob(‘main’, device, options) mới. - Đối với việc tạo tài liệu động từ các công cụ template, hãy sử dụng chuỗi làm nguồn đầu vào và cấu trúc
TeXJob(new StringReader(latexCode), device, options) mới. - Đối với đầu vào dạng luồng trực tiếp từ các yêu cầu mạng, BLOB cơ sở dữ liệu hoặc bộ nhớ đám mây (S3/GCS), hãy sử dụng
InputStreamlàm nguồn đầu vào và cấu trúcTeXJob(inputStream, device, options) mới. - Đối với việc xử lý trong bộ nhớ hiệu suất cao mà không có các điểm nghẽn I/O đĩa, hãy sử dụng bộ đệm bộ nhớ làm nguồn đầu vào và cấu trúc mới
TeXJob(new ByteArrayInputStream(bytes), device, options) mới.
Truyền mã nguồn TeX dưới dạng biến chuỗi Java
Tạo tài liệu TeX trực tiếp từ các chuỗi thô hoặc template chuỗi động mà không cần lưu các tệp .tex tạm thời vào đĩa.
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.");
}
}Truyền mã nguồn TeX từ một InputStream
Đọc mã nguồn TeX trực tiếp từ các luồng đầu vào được cung cấp bởi các yêu cầu HTTP, trường cơ sở dữ liệu hoặc gói tài nguyên.
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.");
}
}Kết hợp đầu vào dạng luồng với các tài nguyên trong thư mục làm việc cục bộ
Khi truyền nội dung TeX chính qua luồng hoặc chuỗi, các tài nguyên phụ (như hình ảnh bên ngoài \includegraphics{} hoặc các gói kiểu \usepackage{}) vẫn có thể được phân giải từ một 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.");
}
}Cài đặt và Thiết lập
Tích hợp Aspose.TeX for Java vào dự án của bạn bằng 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. Tôi có cần tạo các tệp tạm thời trên ổ đĩa khi chuyển đổi chuỗi LaTeX sang PDF không?
Không. Bạn có thể truyền trực tiếp nội dung chuỗi bằng StringReader hoặc ByteArrayInputStream vào TeXJob và truyền đầu ra vào ByteArrayOutputStream. Điều này cho phép xử lý 100% trong bộ nhớ mà không cần truy cập ổ đĩa.
2. Các tham chiếu tệp tương đối bên trong nguồn TeX dựa trên luồng được phân giải như thế nào?
Khi đầu vào chính được truyền dưới dạng luồng hoặc chuỗi, các đường dẫn tương đối bên trong \input{}, \include{} hoặc \includegraphics{} được phân giải dựa trên thư mục được cấu hình thông qua options.setInputWorkingDirectory().
3. Điều gì xảy ra với việc đặt tên đầu ra khi đầu vào được cung cấp dưới dạng luồng?
Khi đầu vào chính là một luồng, Aspose.TeX sử dụng tên công việc mặc định (hoặc tên công việc được cấu hình rõ ràng using options.setJobName(‘custom_name’)) để đặt tên cho các tệp PDF/XPS đầu ra và các tệp nhật ký phụ trợ.