Java で TeX メイン入力を指定する代替方法

Aspose.TeX for Java を使用して、TeX および LaTeX のメインソースコンテンツを組版エンジンに柔軟に渡す方法をご紹介します。静的な .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) 構築を使用します。
  • ディスク I/O によるボトルネックを発生させず、高性能なインメモリ処理を行う場合は、メモリバッファーを入力ソースとして使用し、新しい新しい TeXJob(new ByteArrayInputStream(bytes), device, options) 構築を使用します。

Java の文字列変数として TeX ソースを渡す

一時的な .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.");
    }
}

InputStream から TeX ソースを渡す

HTTP リクエスト、データベースフィールド、リソースバンドルによって提供される入力ストリームから、TeX ソースコードを直接読み取れます。

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

インストールとセットアップ

Maven を使用して Aspose.TeX for Java をプロジェクトに統合します:

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{}内の相対パスは、オプションsetInputWorkingDirectory()で設定されたディレクトリに対して解決されます。

3. 入力がストリームとして提供される場合、出力ファイル名はどうなりますか?

メイン入力がストリームの場合、Aspose.TeX はデフォルトのジョブ名(または options.setJobName(‘custom_name’) を使用して明示的に設定されたジョブ名)を使用して、出力 PDF/XPS ファイルおよび補助ログ ファイルに名前を付けます。