Інтерфейс введення Aspose.TeX | Java
Будь ласка, зверніться до Aspose.TeX для 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. Спробуйте свої сили, коли матимете час!