Cara alternatif untuk menentukan input utama TeX di Java
Jelajahi cara fleksibel untuk memasukkan konten sumber utama TeX dan LaTeX ke dalam mesin penyusunan huruf menggunakan Aspose.TeX for Java. Selain memuat file .tex statis dari sistem file atau arsip ZIP, pengembang dapat meneruskan variabel string TeX mentah, aliran memori, array byte, atau pembaca khusus langsung ke TeXJob untuk kompilasi dokumen secara real-time dan pembuatan laporan yang dirender di server.
Bergantung pada arsitektur aplikasi Anda (misalnya, REST API, penerbitan berbasis database, atau microservice cloud), pilih metode input utama yang paling sesuai dengan alur kerja Anda:
- Untuk proyek berbasis file standar di mana file
.texutama berada diIInputWorkingDirectory, gunakan file bernama sebagai input dan konstruksiTeXJob(‘main’, device, options) baru. - Untuk pembuatan dokumen dinamis dari mesin template, gunakan string sebagai sumber input dan konstruksi
TeXJob(new StringReader(latexCode), device, options) baru. - Untuk input streaming langsung dari permintaan jaringan, BLOB database, atau penyimpanan cloud (S3/GCS), gunakan
InputStreamsebagai sumber input dan konstruksiTeXJob(inputStream, device, options) baru. - Untuk pemrosesan dalam memori berperforma tinggi tanpa hambatan I/O disk, gunakan buffer memori sebagai sumber input dan konstruksi baru baru
TeXJob(new ByteArrayInputStream(bytes), device, options).
Meneruskan sumber TeX sebagai variabel string Java
Buat dokumen TeX langsung dari string mentah atau template string dinamis tanpa menyimpan file .tex sementara ke disk.
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.");
}
}Meneruskan Sumber TeX dari InputStream
Baca kode sumber TeX langsung dari aliran input yang disediakan oleh permintaan HTTP, bidang database, atau paket sumber daya.
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.");
}
}Menggabungkan Input Stream dengan Aset Direktori Kerja Lokal
Saat meneruskan konten TeX utama melalui stream atau string, aset sekunder (seperti gambar eksternal \includegraphics{} atau paket gaya \usepackage{}) tetap dapat di-resolve dari 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.");
}
}Instalasi dan Penyiapan
Integrasikan Aspose.TeX for Java ke dalam proyek Anda menggunakan 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>
Pertanyaan yang Sering Diajukan
1. Apakah saya perlu membuat file sementara di disk saat mengonversi string LaTeX ke PDF?
Tidak. Anda dapat meneruskan konten string menggunakan StringReader atau ByteArrayInputStream secara langsung ke TeXJob dan mengalirkan output ke ByteArrayOutputStream. Ini memungkinkan pemrosesan 100% di memori tanpa menyentuh disk.
2. Bagaimana referensi file relatif di dalam sumber TeX berbasis stream diselesaikan?
Ketika input utama diteruskan sebagai stream atau string, jalur relatif di dalam \input{}, \include{}, atau \includegraphics{} diselesaikan relatif terhadap direktori yang dikonfigurasi melalui options.setInputWorkingDirectory().
3. Apa yang terjadi pada penamaan output ketika input diberikan sebagai stream?
Ketika input utama berupa stream, Aspose.TeX menggunakan nama pekerjaan default (atau nama pekerjaan yang dikonfigurasi secara eksplisit using options.setJobName(‘custom_name’)) untuk memberi nama file PDF/XPS output dan file log tambahan.