Интерфейс ввода 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. Попробуйте свои силы, когда у вас есть время!