Интерфейс ввода Aspose.TeX | Java

Пожалуйста, обратитесь к Aspose.TeX for Java ссылка на API для формальных определений реализации ввода-вывода.

Примеры файловой системы и ZIP выполняют набор hello-world.tex в hello-world.xps. Укажите в inputDirectory папку с файлом TeX, а в outputDirectory — существующую папку вывода. Для ввода из ZIP задайте inputZip как java.nio.file.Path к архиву, содержащему in/hello-world.tex. Импортируйте классы Aspose.TeX из выбранного примера, com.aspose.tex.rendering.XpsDevice и необходимые классы java.io и java.nio.file. Вызывающий метод должен обрабатывать или объявлять исключения. Примените лицензию согласно руководству по лицензированию, чтобы избежать ограничений ознакомительной версии.

Концепция входного каталога

Поскольку примитивы ввода-вывода языка TeX могут работать только с именами файлов, Aspose.TeX для Java определяет каталог как сопоставление имен и объемов данных. Предполагается, что основная часть данных представляет собой файлы, потоки, массивы или что-то еще. 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. Второй аргумент конструктора — базовый путь внутри архива. Если мы хотим, чтобы весь архив был входным каталогом, нам следует передать пустую строку. Пример держит ZIP-поток и папку ввода открытыми до завершения задания TeX, затем закрывает их. Он выполняется без взаимодействия с пользователем и сохраняет вывод терминала в памяти.

Концепция входного терминала

Теперь вспомним, что есть еще и терминальный вход. Что касается этого, Aspose.TeX для Java определяет общий интерфейс IInputTerminal как имеющий два метода. Один из них возвращает экземпляр BufferedReader. Другой метод возвращает InputStream в качестве базового потока. Предоставленные реализации интерфейса обсуждаются ниже.

Получение терминального ввода с консоли

Для этого нам нужно установить опцию TerminalIn как экземпляр класса 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. Попробуйте свои силы, когда у вас есть время!