Aspose.TeX 的输入接口 | Java

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

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

输入目录的概念

由于tex语言的I/O个性只能处理文件名,因此用于 Java 的 Aspose.TeX将目录定义为名称和大部分数据之间的映射。大部分数据应该是文件,流,数组或其他任何数据。API允许我们分别指定输入和输出工作目录。它提供了常规 iInputworkingDirectory接口,用户可以为其自己的目的实现。它还提供了自己的实现,将在下面讨论。该接口定义了 getfile()方法,该方法返回数据流并确定文件的全名,同时以假设为不同的名称为第一个参数,实际上是映射密钥。

从磁盘文件系统获取文件输入

这就是我们的方式:

 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}

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

从zip档案中获取文件输入

我们还可以将输入文件放入zip存档中,并将其视为输入目录。在这种情况下,我们应该按以下方式进行:

 1// Read hello-world.tex from the in/ folder of a ZIP archive.
 2// inputZip is a java.nio.file.Path; outputDirectory is an existing output folder.
 3TeXJobResult result;
 4try (InputStream zipStream = Files.newInputStream(inputZip)) {
 5    TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
 6    InputZipDirectory input = new InputZipDirectory(zipStream, "in");
 7    OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 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    } finally {
16        device.dispose();
17        output.close();
18        input.close();
19    }
20}

首先,我们创建包含zip文件的流。然后,在创建转换选项后,我们将 InputWorkingDirectory选项设置为 InputzipDirectory类的实例。构造函数的第二个论点是存档内部的基本路径。如果我们希望整个存档成为输入目录,则应传递空字符串。 此示例在 TeX 作业结束前保持 ZIP 流和输入目录打开,随后关闭它们。示例以非交互方式运行,并将终端输出保存在内存中。

输入终端的概念

现在,让我们记住,还有终端输入。至于这个,java的Aspose.TeX将常规 iinputterminal接口定义为具有两种方法。其中一个返回 BufferedReader实例。另一种方法将 InputStream作为基础流返回。提供的接口的实现将在下面讨论。

从控制台获取终端输入

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

1// Use the console for terminal input; this is also the default.
2TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX());
3options.setTerminalIn(new InputConsoleTerminal());

InputConsoleTerminal 是此选项的默认值。此示例仅演示终端配置,不运行作业。请求终端输入的作业需要用户输入或自定义终端实现。上面的文件系统和 ZIP 示例使用完整的输入文件以非交互方式运行。

从理论上讲,如果我们具有具有可预测行为的交互式TEX文件(或脚本),我们可能希望实现输入终端的版本,该版本包含一个互补的脚本以响应Tex Engine的请求。有时间尝试您的手!