LaTeX в изображение | Java

Как конвертировать LaTeX в PNG

Давайте подробнее рассмотрим код Java, обеспечивающий самый простой способ преобразования LaTeX в формат PNG.

Задайте в inputFile полный путь к файлу LaTeX, например hello-world.ltx, а в outputDirectory — существующую папку вывода. Импортируйте используемые в примере классы из com.aspose.tex и com.aspose.tex.rendering. Вызывающий метод должен обрабатывать или объявлять исключения. Примените лицензию согласно руководству по лицензированию, чтобы избежать ограничений ознакомительной версии. Пример использует неинтерактивный режим и закрывает ресурсы вывода. В PNG-примере задано разрешение 300 DPI. Для одностраничного файла hello-world.ltx автоматически создаётся hello-world.png, hello-world.jpg, hello-world.tif, hello-world.bmp или hello-world.svg в зависимости от выбранного формата.

 1// Convert LaTeX to PNG.
 2// inputFile is the full input path; outputDirectory is an existing output folder.
 3TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
 4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 5options.setOutputWorkingDirectory(output);
 6PngSaveOptions saveOptions = new PngSaveOptions();
 7saveOptions.setResolution(300);
 8options.setSaveOptions(saveOptions);
 9options.setInteraction(Interaction.NonstopMode);
10
11ImageDevice device = new ImageDevice();
12TeXJobResult result;
13try {
14    result = new TeXJob(inputFile, device, options).run();
15} finally {
16    device.dispose();
17    output.close();
18}

Итак, первое, что нам нужно сделать (иногда не самое первое, как мы узнаем позже) — это создать экземпляр класса TeXOptions. Единственный статический метод, который это делает, — consoleAppOptions(), поэтому не будем заморачиваться над значением его имени. Метод принимает экземпляр objectLaTeX() класса TeXConfig, который точно подходит для преобразования файла LaTeX. Эта конфигурация предписывает механизму Object TeX загрузить формат Object LaTeX и быть готовым принять файл LaTeX. Формат Object LaTeX на самом деле представляет собой формат LaTeX, за исключением того, что он использует специальные примитивы Object TeX для настройки показателей страницы.

Первая из обязательных опций — OutputWorkingDirectory, которая определяет пространство или область, куда будет записываться вывод TeX. Здесь приведены подробные сведения о концепции выходного каталога в Aspose.TeX для Java. В этом примере мы используем класс OutputFileSystemDirectory, который позволяет нам записывать выходные данные в указанный каталог или папку.

Второй вариант — это экземпляр класса SaveOptions, который будет управлять преобразованием объектной модели в целевой формат. Поскольку мы конвертируем LaTeX в PNG, именно экземпляр класса PngSaveOptions позволяет нам указать разрешение выходных изображений.

Далее нам нужно создать экземпляр класса TeXJob. Желая преобразовать файл LaTeX, хранящийся в файловой системе, мы используем эту версию конструктора. Нам следует указать полный путь к файлу. В противном случае движок будет искать его в текущем каталоге (который определен здесь) и, скорее всего, не найдет. Тем не менее, мы можем опустить расширение, если наш файл имеет расширение .tex. Движок добавит его автоматически. Второй аргумент конструктора — это экземпляр класса Device. Поскольку мы конвертируем LaTeX в PNG, это экземпляр класса ImageDevice (который является общим для всех поддерживаемых форматов изображений). В качестве последнего аргумента мы передаем недавно подготовленные варианты конвертации.

Все, что нам нужно сделать сейчас, это запустить задание.

Независимо от того, был ли запуск успешным или нет, первым результатом, который мы увидим, будет вывод терминала. В случае успеха это выглядит примерно так:

 1This is ObjectTeX, Version 3.1415926-1.0 (Aspose.TeX 21.8)
 2entering extended mode
 3
 4(<input_directory>\hello-world.ltx
 5LaTeX2e <2011/06/27>
 6(article.cls
 7Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
 8(size10.clo))
 9No file hello-world.aux.
10[1]
11(<output_directory>\hello-world.aux) )
12Output written on hello-world.png (1 page).
13Transcript written on hello-world.log.

Остальные продукты запуска движка мы найдем в папке, которую мы указали в качестве выходного каталога. Это будет файл стенограммы (.log) и, Вуаля!, основные выходные файлы изображений PNG.

Альтернативный способ записи основного выходного файла PNG.

Есть еще один способ получить данные изображения в виде массива байтовых массивов: каждый массив во втором измерении представляет данные изображения для отдельной страницы.

 1// Convert LaTeX to PNG and save each page from the returned byte arrays.
 2// inputFile is the full input path; outputDirectory is an existing output folder.
 3TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
 4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 5options.setOutputWorkingDirectory(output);
 6PngSaveOptions saveOptions = new PngSaveOptions();
 7saveOptions.deviceWritesImages(false);
 8options.setSaveOptions(saveOptions);
 9options.setInteraction(Interaction.NonstopMode);
10
11ImageDevice device = new ImageDevice();
12TeXJobResult result;
13try {
14    result = new TeXJob(inputFile, device, options).run();
15    byte[][] pages = device.getResult();
16    for (int i = 0; i < pages.length; i++) {
17        Files.write(Paths.get(outputDirectory, "page-" + (i + 1) + ".png"), pages[i]);
18    }
19} finally {
20    device.dispose();
21    output.close();
22}

Пример ручного сохранения также требует java.nio.file.Files и java.nio.file.Paths. Он сохраняет данные страниц из ImageDevice.getResult() как page-1.png, page-2.png и так далее. Поскольку задано deviceWritesImages(false), автоматическая запись PNG отключена и вручную сохранённые страницы не дублируются в выходном каталоге. Это отличается от записи PDF в поток, где поток задаёт путь вывода одного PDF-документа.

О параметрах ввода

Если наш основной входной файл требует зависимостей, например, пакетов, которые не включены в базовую систему LaTeX и поддерживаемых пакетов, мы ДОЛЖНЫ установить параметр RequiredInputDirectory аналогично тому, как мы устанавливаем параметр OutputWorkingDirectory. и поместите зависимости в этот каталог. Зависимости могут быть произвольно организованы в подкаталогах. Если у нас есть собственные файлы, которые нужно включить в процесс верстки, скажем, внешние графические файлы, мы ДОЛЖНЫ также установить InputWorkingDirectory, используя путь к месту, где собраны эти файлы. Мы также можем поместить основной входной файл где-нибудь внутри входного каталога и передать относительный путь в конструктор TeXJob (или вообще не указывать путь, если основной входной файл находится в корне). Здесь приведены подробные сведения о концепции входного каталога в Aspose.TeX для Java и предоставленных реализациях.

Другие варианты работы в TeX обсуждаются здесь.

Вы также можете ознакомиться с бесплатным преобразованием LaTeX в PNG веб-приложение, созданным на основе API Aspose.TeX for .NET. Здесь — страница версии Java.

Ниже мы обсудим преобразование LaTeX в другие поддерживаемые форматы растровых изображений. Мы не будем вдаваться в подробности только потому, что на самом деле никаких подробностей нет. Единственная разница заключается в типе свойства SaveOptions в параметрах преобразования.

Как конвертировать LaTeX в JPG

 1// Convert LaTeX to JPEG.
 2// inputFile is the full input path; outputDirectory is an existing output folder.
 3TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
 4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 5options.setOutputWorkingDirectory(output);
 6options.setSaveOptions(new JpegSaveOptions());
 7options.setInteraction(Interaction.NonstopMode);
 8
 9ImageDevice device = new ImageDevice();
10TeXJobResult result;
11try {
12    result = new TeXJob(inputFile, device, options).run();
13} finally {
14    device.dispose();
15    output.close();
16}

Вы также можете ознакомиться с бесплатным веб-приложением для преобразования LaTeX в JPG, созданным на основе API Aspose.TeX for .NET. Здесь — страница версии Java.

Как конвертировать LaTeX в TIFF

 1// Convert LaTeX to TIFF.
 2// inputFile is the full input path; outputDirectory is an existing output folder.
 3TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
 4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 5options.setOutputWorkingDirectory(output);
 6options.setSaveOptions(new TiffSaveOptions());
 7options.setInteraction(Interaction.NonstopMode);
 8
 9ImageDevice device = new ImageDevice();
10TeXJobResult result;
11try {
12    result = new TeXJob(inputFile, device, options).run();
13} finally {
14    device.dispose();
15    output.close();
16}

Вы также можете ознакомиться с бесплатным преобразованием LaTeX в TIFF веб-приложение, созданным на основе API Aspose.TeX for .NET. Здесь — страница версии Java.

Как конвертировать LaTeX в BMP

 1// Convert LaTeX to BMP.
 2// inputFile is the full input path; outputDirectory is an existing output folder.
 3TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
 4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 5options.setOutputWorkingDirectory(output);
 6options.setSaveOptions(new BmpSaveOptions());
 7options.setInteraction(Interaction.NonstopMode);
 8
 9ImageDevice device = new ImageDevice();
10TeXJobResult result;
11try {
12    result = new TeXJob(inputFile, device, options).run();
13} finally {
14    device.dispose();
15    output.close();
16}

Вы также можете ознакомиться с бесплатным веб-приложением для преобразования LaTeX в BMP, созданным на основе API Aspose.TeX for .NET. Здесь — страница версии Java.

Как конвертировать LaTeX в SVG

И еще один поддерживаемый целевой формат — SVG. Масштабируемая векторная графика (SVG) — это формат векторных изображений на основе XML для определения двумерной графики с поддержкой интерактивности и анимации.

Изображения SVG определяются в формате векторной графики и сохраняются в текстовых файлах XML. Это означает, что изображения SVG можно масштабировать без потери качества, а файлы SVG можно искать, индексировать, создавать сценарии и сжимать. Текстовые файлы XML можно создавать и редактировать с помощью текстовых редакторов или редакторов векторной графики. Они отображаются наиболее часто используемыми веб-браузерами.

Кроме того, существует библиотека Aspose.SVG, которая имеет различные функции, основанные на формате SVG. К ним относятся создание, загрузка, редактирование и преобразование документов SVG.

Преобразование в SVG так же просто, как и преобразование в форматы растровых изображений, за исключением того, что в дополнение к SaveOptions нам нужно изменить устройство на экземпляр SvgDevice.

 1// Convert LaTeX to SVG.
 2// inputFile is the full input path; outputDirectory is an existing output folder.
 3TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
 4OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 5options.setOutputWorkingDirectory(output);
 6options.setSaveOptions(new SvgSaveOptions());
 7options.setInteraction(Interaction.NonstopMode);
 8
 9SvgDevice device = new SvgDevice();
10TeXJobResult result;
11try {
12    result = new TeXJob(inputFile, device, options).run();
13} finally {
14    device.dispose();
15    output.close();
16}

Вы также можете ознакомиться с бесплатным преобразованием LaTeX в SVG веб-приложение, созданным на основе Aspose.TeX for .NET. Здесь — страница версии Java.