Выходной интерфейс 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.