วิธีอื่นในการระบุข้อมูลหลัก TeX ใน Java
สำรวจวิธีที่ยืดหยุ่นในการส่งเนื้อหาซอร์ส TeX และ LaTeX หลักเข้าสู่เอนจินการจัดเรียงข้อความโดยใช้ Aspose.TeX for Java นอกเหนือจากการโหลดไฟล์ .tex แบบคงที่จากระบบไฟล์หรือไฟล์ ZIP แล้ว นักพัฒนายังสามารถส่งตัวแปรสตริง TeX ดิบ สตรีมหน่วยความจำ อาร์เรย์ไบต์ หรือ reader แบบกำหนดเองไปยัง 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) ใหม่ใหม่
ส่งซอร์ส TeX เป็นตัวแปรสตริง Java
สร้างเอกสาร 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.");
}
}ส่งซอร์ส TeX จาก InputStream
อ่านซอร์สโค้ด TeX โดยตรงจากสตรีมอินพุตที่ได้รับจากคำขอ HTTP ฟิลด์ฐานข้อมูล หรือชุดทรัพยากร
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.");
}
}การติดตั้งและการตั้งค่า
ผสานรวม Aspose.TeX for Java เข้ากับโปรเจ็กต์ของคุณโดยใช้ 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. จำเป็นต้องสร้างไฟล์ชั่วคราวบนดิสก์เมื่อแปลงสตริง LaTeX เป็น PDF หรือไม่?
ไม่จำเป็น คุณสามารถส่งเนื้อหาสตริงโดยใช้ StringReader หรือ ByteArrayInputStream โดยตรงไปยัง TeXJob และสตรีมเอาต์พุตไปยัง ByteArrayOutputStream ซึ่งช่วยให้ประมวลผลในหน่วยความจำ 100% โดยไม่ต้องใช้งานดิสก์
2. การอ้างอิงไฟล์แบบสัมพัทธ์ภายในซอร์ส TeX ที่ใช้สตรีมได้รับการแก้ไขอย่างไร?
เมื่ออินพุตหลักถูกส่งเป็นสตรีมหรือสตริง เส้นทางแบบสัมพัทธ์ภายใน \input{}, \include{} หรือ \includegraphics{} จะถูกแก้ไขโดยอ้างอิงจากไดเรกทอรีที่กำหนดค่าผ่าน options.setInputWorkingDirectory()
3. จะเกิดอะไรขึ้นกับการตั้งชื่อเอาต์พุตเมื่ออินพุตถูกจัดเตรียมเป็นสตรีม?
เมื่ออินพุตหลักเป็นสตรีม Aspose.TeX จะใช้ชื่อ job เริ่มต้น (หรือชื่อ job ที่กำหนดไว้อย่างชัดเจน using options.setJobName(‘custom_name’)) เพื่อตั้งชื่อไฟล์ PDF/XPS เอาต์พุตและไฟล์บันทึกเสริม