Aspose.TeX 的输出接口 | Java

请参阅java Aspose.TeX API参考有关I/O实现的正式定义。

文件系统、ZIP 和终端示例将 hello-world.tex 排版为 XPS。将 inputDirectory 设置为包含 TeX 文件的文件夹,将 outputDirectory 设置为现有的输出文件夹。对于 ZIP 输出,将 outputZip 设置为现有文件夹中的 java.nio.file.Path。 导入所选示例使用的 Aspose.TeX 类、com.aspose.tex.rendering.XpsDevice 以及所需的 java.io 和 java.nio.file 类。调用方法必须处理或声明异常。按照 许可指南应用许可证,以避免评估版限制。

输出目录的概念

由于tex语言的I/O元素只能处理文件名,因此aspose.tex将目录定义为名称和大部分数据之间的映射。大部分数据应该是文件,流,数组或其他任何数据。API允许我们分别指定输入和输出工作目录。它为输出提供了常规 iOutputworkingDirectory接口,用户可以为其自己的目的实现。它还提供了自己的实现,将在下面讨论。该接口扩展了 iinputworkingDirectory,因为引擎可以首先创建和编写文件,然后将其读回。接口自己的方法 getOuputfile()返回流的流,而不是 getfile()返回的流。

将文件输出输出到磁盘文件系统

正如我们提到的 上图, outputWorkingDirectory的最常见值可能是 outputsFilesystemdirectory类的一个实例。

这是我们将其设置的方式:

 1// inputDirectory contains hello-world.tex; outputDirectory is an existing output folder.
 2TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
 3InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
 4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 5options.setInputWorkingDirectory(input);
 6options.setOutputWorkingDirectory(output);
 7options.setInteraction(Interaction.NonstopMode);
 8options.setTerminalOut(new OutputMemoryTerminal());
 9
10XpsDevice device = new XpsDevice();
11TeXJobResult result;
12try {
13    result = new TeXJob("hello-world", device, options).run();
14} finally {
15    device.dispose();
16    output.close();
17    input.close();
18}

此用例非常简单,因此我们很长一段时间都不会呆在上面。

将文件输出写入邮政编码

我们还可以创建一个文件(或流),并让Tex引擎将其用作ZIP存档来存储输出文件。这里是:

 1// Store the XPS document and TeX transcript in a ZIP archive.
 2// inputDirectory contains hello-world.tex; outputZip is the java.nio.file.Path to create.
 3TeXJobResult result;
 4try (OutputStream zipStream = Files.newOutputStream(outputZip)) {
 5    TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
 6    InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
 7    OutputZipDirectory output = new OutputZipDirectory(zipStream);
 8    options.setInputWorkingDirectory(input);
 9    options.setOutputWorkingDirectory(output);
10    options.setInteraction(Interaction.NonstopMode);
11    options.setTerminalOut(new OutputMemoryTerminal());
12    XpsDevice device = new XpsDevice();
13    try {
14        result = new TeXJob("hello-world", device, options).run();
15        // Finalize the archive while its underlying stream is still open.
16        output.finish();
17    } finally {
18        device.dispose();
19        output.close();
20        input.close();
21    }
22}

首先,我们为zip文件创建一个输出流。然后,在创建转换选项之后,我们将 outputworkingDirectory选项设置为 outputzipdirectory类的实例。 此示例将 hello-world.xps 和 hello-world.log 保存到归档中。作业结束后,在关闭底层流之前调用输出目录的 finish()。示例在作业结束前保持流和工作目录打开,随后关闭它们。

输出终端的概念

输出中还有另一个重要部分 - 终端输出。至于这个,java的Aspose.TeX将常规 iOutputterminal接口定义为具有两种方法。其中一个返回 BufferedWriter实例。另一个将 outputStream实例作为基础流返回。提供的接口的实现将在下面讨论。

将终端输出写入控制台

为此,我们需要将 终端图选项设置为 outputConsoleterminal类的实例。

 1// inputDirectory contains hello-world.tex; outputDirectory is an existing output folder.
 2TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
 3InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
 4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 5options.setInputWorkingDirectory(input);
 6options.setOutputWorkingDirectory(output);
 7options.setInteraction(Interaction.NonstopMode);
 8// This is also the default output terminal.
 9options.setTerminalOut(new OutputConsoleTerminal());
10
11XpsDevice device = new XpsDevice();
12TeXJobResult result;
13try {
14    result = new TeXJob("hello-world", device, options).run();
15} finally {
16    device.dispose();
17    output.close();
18    input.close();
19}

OutputConsoleTerminal 是此选项的默认值。此示例显式选择它,并在转换期间将终端输出写入控制台。四个示例均以非交互方式运行;文件系统和 ZIP 示例将终端输出保存在内存中。

将终端输出写入文件

与输入终端不同,aspose.tex的Java提供了 iOutputterminal的实现,这使我们能够将终端输出写入某些输出目录中的文件。

 1// inputDirectory contains hello-world.tex; outputDirectory is an existing output folder.
 2TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
 3InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
 4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 5options.setInputWorkingDirectory(input);
 6options.setOutputWorkingDirectory(output);
 7options.setInteraction(Interaction.NonstopMode);
 8// Set the output directory first: the terminal writes <job_name>.trm there.
 9options.setTerminalOut(new OutputFileTerminal(options.getOutputWorkingDirectory()));
10
11XpsDevice device = new XpsDevice();
12TeXJobResult result;
13try {
14    result = new TeXJob("hello-world", device, options).run();
15} finally {
16    device.dispose();
17    output.close();
18    input.close();
19}

创建 OutputFileTerminal 之前先设置输出工作目录。它将终端输出写入该目录中的 <job_name>.trm,在此示例中为 hello-world.trm。此终端文件与 TeX 日志 hello-world.log 分开。要将终端输出写入其他位置,请向构造函数传入其他 IOutputWorkingDirectory 实现。