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 ファイルおよび補助ログ ファイルに名前を付けます。