Java’da TeX ana girişini belirtmenin alternatif yolları

Aspose.TeX for Java kullanarak TeX ve LaTeX kaynak içeriğini dizgi motoruna aktarmanın esnek yollarını keşfedin. Geliştiriciler, statik .tex dosyalarını bir dosya sisteminden veya ZIP arşivinden yüklemenin yanı sıra ham TeX dize değişkenlerini, bellek akışlarını, bayt dizilerini veya özel okuyucuları doğrudan TeXJob‘a aktararak belgeleri gerçek zamanlı olarak derleyebilir ve sunucu tarafında işlenen raporlar oluşturabilir.

 

Uygulama mimarinize (ör. REST API, veritabanı tabanlı yayıncılık veya bulut mikro hizmeti) bağlı olarak iş akışınıza en uygun ana giriş yöntemini seçin:

  • Ana .tex dosyasının IInputWorkingDirectory içinde bulunduğu standart dosya tabanlı projelerde, giriş olarak adlandırılmış bir dosya kullanın ve yeni TeXJob(‘main’, device, options) oluşturma yöntemini kullanın.
  • Şablon motorlarından dinamik belge oluşturmak için giriş kaynağı olarak bir dize kullanın ve yeni TeXJob(new StringReader(latexCode), device, options) oluşturma yöntemini kullanın.
  • Ağ isteklerinden, veritabanı BLOB’larından veya bulut depolama alanından (S3/GCS) doğrudan akış yoluyla giriş almak için giriş kaynağı olarak bir InputStream kullanın ve yeni TeXJob(inputStream, device, options) oluşturma yöntemini kullanın.
  • Disk G/Ç darboğazları olmadan yüksek performanslı bellek içi işleme için giriş kaynağı olarak bir bellek arabelleği kullanın ve yeni yeni TeXJob(new ByteArrayInputStream(bytes), device, options) oluşturma yöntemini kullanın.

TeX kaynağını bir Java dize değişkeni olarak aktarma

Geçici .tex dosyalarını diske kaydetmeden ham dizelerden veya dinamik dize şablonlarından doğrudan TeX belgeleri oluşturun.

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 kaynağını bir InputStream'den aktarma

TeX kaynak kodunu HTTP istekleri, veritabanı alanları veya kaynak paketleri tarafından sağlanan giriş akışlarından doğrudan okuyun.

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.");
    }
}

Akış girişini yerel çalışma dizini varlıklarıyla birleştirme

Ana TeX içeriği bir akış veya dize aracılığıyla aktarılırken, ikincil varlıklar (harici görüntüler \includegraphics{} veya stil paketleri \usepackage{} gibi) yine de bir IInputWorkingDirectory üzerinden çözümlenebilir.

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.");
    }
}

Kurulum ve Ayarlar

Aspose.TeX for Java’yı Maven kullanarak projenize entegre edin:

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 dizelerini PDF’ye dönüştürürken geçici disk dosyaları oluşturmam gerekiyor mu?

Hayır. StringReader veya ByteArrayInputStream kullanarak dize içeriğini doğrudan TeXJob öğesine aktarabilir ve çıktıyı ByteArrayOutputStream öğesine akıtabilirsiniz. Bu, diske hiç dokunmadan %100 bellek içi işlem yapılmasını sağlar.

2. Akış tabanlı bir TeX kaynağındaki göreli dosya başvuruları nasıl çözümlenir?

Ana giriş bir akış veya dize olarak aktarıldığında, \input{}, \include{} veya \includegraphics{} içindeki göreli yollar options.setInputWorkingDirectory() aracılığıyla yapılandırılan dizine göre çözümlenir.

3. Giriş bir akış olarak sağlandığında çıktı adlandırmasına ne olur?

Ana giriş bir akış olduğunda Aspose.TeX, çıktı PDF/XPS dosyalarını ve yardımcı günlük dosyalarını adlandırmak için varsayılan iş adını (veya açıkça yapılandırılmış iş adını using options.setJobName(‘custom_name’)) kullanır.