Выходной интерфейс Aspose.TeX | Java

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

Примеры файловой системы, 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 могут работать только с именами файлов, Aspose.TeX определяет каталог как сопоставление между именами и объемами данных. Предполагается, что основная часть данных представляет собой файлы, потоки, массивы или что-то еще. API позволяет нам отдельно указывать входные и выходные рабочие каталоги. Он предоставляет общий интерфейс IOutputWorkingDirectory для вывода, который пользователь может реализовать в своих целях. Он также предоставляет свои собственные реализации, которые будут обсуждаться ниже. Интерфейс расширяет IInputWorkingDirectory, поскольку механизм может сначала создать и записать файл, а затем прочитать его обратно. Собственный метод интерфейса getOuputFile() возвращает поток для записи, в отличие от потока для чтения, возвращаемого getFile().

Запись вывода файла в файловую систему диска

Как мы уже упоминали выше, наиболее распространенным значением OutputWorkingDirectory, скорее всего, будет экземпляр класса OutputFileSystemDirectory.

Вот как мы это установим:

 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-архив

Мы также можем создать файл (или поток) и позволить движку 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() для папки вывода до закрытия потока ZIP-архива. Примеры держат потоки и рабочие папки открытыми до завершения задания, затем закрывают их.

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

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

Запись вывода терминала на консоль

Для этого нам нужно установить опцию TerminalOut как экземпляр класса 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 for 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.