طرق بديلة لتحديد الإدخال الرئيسي لـ TeX في Java

استكشف طرقًا مرنة لتغذية محتوى مصدر TeX وLaTeX الرئيسي إلى محرك التنضيد باستخدام Aspose.TeX for Java. وبالإضافة إلى تحميل ملفات .tex الثابتة من نظام الملفات أو أرشيف ZIP، يمكن للمطورين تمرير متغيرات سلاسل TeX الخام، وتدفقات الذاكرة، ومصفوفات البايت، أو أدوات القراءة المخصصة مباشرةً إلى TeXJob لتجميع المستندات في الوقت الفعلي وإنشاء التقارير التي يتم عرضها على الخادم.

 

اعتمادًا على بنية تطبيقك (مثل REST API أو النشر المستند إلى قاعدة البيانات أو الخدمات المصغرة السحابية)، اختر طريقة الإدخال الرئيسية التي تتناسب بشكل أفضل مع سير عملك:

  • بالنسبة إلى المشاريع القياسية القائمة على الملفات حيث يوجد ملف .tex الرئيسي في IInputWorkingDirectory، استخدم ملفًا مسمى كإدخال وإنشاء TeXJob جديد باستخدام (‘main’, device, options).
  • بالنسبة إلى إنشاء المستندات الديناميكية من محركات القوالب، استخدم سلسلة نصية كمصدر للإدخال وإنشاء TeXJob جديد باستخدام (new StringReader(latexCode), device, options).
  • بالنسبة إلى إدخال التدفقات مباشرةً من طلبات الشبكة أو كائنات BLOB في قواعد البيانات أو التخزين السحابي (S3/GCS)، استخدم InputStream كمصدر للإدخال وإنشاء TeXJob جديد باستخدام (inputStream, device, options).
  • بالنسبة إلى المعالجة عالية الأداء داخل الذاكرة دون اختناقات الإدخال/الإخراج على القرص، استخدم مخزنًا مؤقتًا في الذاكرة كمصدر للإدخال وإنشاء 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>

الأسئلة الشائعة

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 الناتجة وملفات السجل المساعدة.