วิธีอื่นในการระบุข้อมูลหลัก 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 เอาต์พุตและไฟล์บันทึกเสริม