AsposeTeXforPython – Часто задаваемые вопросы



В: Что такое AsposeTeXforPython?

О: AsposeTeXforPython — это API на чистом Python (построенный на основе библиотеки AsposeTeX .NET через pythonnet), который визуализирует и преобразует документы LaTeX/TeX в PDF, XPS, SVG, PNG, JPEG, BMP, TIFF и другие форматы изображений, не требуя какого-либо внешнего распространения TeX. Он работает внутри процесса и подходит для веб-служб, настольных приложений и автоматических генераторов отчетов.


В: Как установить AsposeTeXforPython?

О: Запустите pip install aspose-tex-python-net. Пакет автоматически объединяет необходимую среду выполнения Python. Установите его в любой виртуальной среде (Windows, Linux, macOS) с Python3.8 или более поздней версии. Проверьте установку с помощью:

1import aspose.tex as tex
2print(tex.__version__)



В: Нужен ли мне локальный дистрибутив TeX (MiKTeX, TeXLive и т. д.)?

О: Нет. Вся логика синтаксического анализа и рендеринга встроена в AsposeTeX, поэтому вам никогда не понадобится внешний движок TeX. Библиотека включает в себя более 300 основных пакетов LaTeX и файлы общих классов.


В: Как преобразовать файл .tex в PDF с помощью нескольких строк кода?

О: Создайте TeXJob с конфигурацией Object LaTeX, PdfSaveOptions и PdfDevice. Укажите путь к файлу LaTeX в ASPOSE_TEX_INPUT_FILE, а выходной каталог — в ASPOSE_TEX_OUTPUT_DIR, либо измените пути в примере. По умолчанию используются hello-world.ltx и output. Предварительно примените лицензию. Дополнительные входные файлы ищутся рядом с основным документом; обработка выполняется без интерактивного ввода. Лицензирование

 1# Convert LaTeX to PDF.
 2import os
 3from pathlib import Path
 4from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 5from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 6from aspose.tex.presentation.pdf import PdfDevice, PdfSaveOptions
 7
 8# Set these paths to your LaTeX document and output directory.
 9input_file = Path(os.environ.get("ASPOSE_TEX_INPUT_FILE", "hello-world.ltx")).resolve()
10output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
11if not input_file.is_file():
12    raise FileNotFoundError(input_file)
13output_dir.mkdir(parents=True, exist_ok=True)
14
15# Use the Object LaTeX format and resolve additional inputs beside the main file.
16options = TeXOptions.console_app_options(TeXConfig.object_latex)
17options.input_working_directory = InputFileSystemDirectory(str(input_file.parent))
18options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
19options.interaction = Interaction.NONSTOP_MODE
20options.terminal_out = OutputMemoryTerminal()
21options.save_options = PdfSaveOptions()
22device = PdfDevice()
23job_result = TeXJob(str(input_file), device, options).run()

Имя результата соответствует входному файлу: из hello-world.ltx получается hello-world.pdf. LaTeX → PDF

В: Какие форматы вывода может генерировать AsposeTeXforPython?

О: PDF, XPS, SVG, PNG, JPEG, BMP и TIFF. Каждым форматом можно управлять с помощью определенных объектов SaveOptions (например, PdfSaveOptions, PngSaveOptions, SvgSaveOptions).

В: Как встроить собственные шрифты в созданный PDF-файл?

О: Шрифты выбираются в документе TeX или LaTeX и его пакетах. О ресурсах пакетов см. Внешние пакеты LaTeX. Свойство subset_fonts класса PdfSaveOptions определяет, следует ли встраивать только используемые глифы; оно не выбирает пользовательский шрифт. Полный пример XPS с этой же настройкой приведён в разделе Подмножества шрифтов.

В: Какие пакеты и классы LaTeX поддерживаются «из коробки»?

О: Библиотека включает распространённые пакеты и классы LaTeX. Их состав указан в списке встроенных пакетов. В примере внешних пакетов исходные файлы pgfplots передаются через required_input_directory.

В: Как я могу использовать сторонний файл .sty или файл класса, который не является встроенным?

A: Задайте для TeXOptions.required_input_directory объект InputFileSystemDirectory, указывающий на файлы нужного пакета. Полный пример загружает fancybox.sty из ExternalLaTeXPackages/packages и преобразует required-input-fs.tex в PNG. О ZIP-архивах и ограничениях совместимости см. Внешние пакеты LaTeX.

Сначала примените лицензию. Укажите в ASPOSE_TEX_INPUT_DIR папку, содержащую ExternalLaTeXPackages с двумя файлами .tex и подкаталогом packages (по умолчанию: input). Задайте папку вывода в ASPOSE_TEX_OUTPUT_DIR (по умолчанию: output).

 1# Load an external LaTeX package from a directory.
 2import os
 3from pathlib import Path
 4from os import path
 5from io import BytesIO
 6from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 7from aspose.tex.io import InputFileSystemDirectory, InputZipDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 8from aspose.tex.presentation.image import ImageDevice, PngSaveOptions
 9
10output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
11output_dir.mkdir(parents=True, exist_ok=True)
12input_dir = Path(os.environ.get("ASPOSE_TEX_INPUT_DIR", "input")).resolve() / "ExternalLaTeXPackages"
13# Create conversion options for Object LaTeX format upon Object TeX engine extension.
14options = TeXOptions.console_app_options(TeXConfig.object_latex)
15options.interaction = Interaction.NONSTOP_MODE
16options.terminal_out = OutputMemoryTerminal()
17# Specify a file system working directory for the output.
18options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
19# Specify a file system working directory for the required input.
20# The directory containing packages may be located anywhere.
21options.required_input_directory = InputFileSystemDirectory(path.join(str(input_dir), "packages"))
22# Initialize the options for saving in PNG format.
23options.save_options = PngSaveOptions()
24# Run LaTeX to PNG conversion.
25TeXJob(path.join(str(input_dir), "required-input-fs.tex"), ImageDevice(True), options).run()


В: Каковы основные ограничения движка?

О:

ОграничениеПодробности
Экранирование оболочки (\write18)Отключено в целях безопасности.
Полная экстернализация TikZНе поддерживается; большинство графических объектов TikZ визуализируются в процессе, но очень сложные рисунки могут давать сбои.
Охват шрифтов UnicodeПолностью поддерживаются только шрифты TrueType/OpenType с полным набором глифов; устаревшие шрифты Type1 могут потребовать преобразования.
Очень большие документы (>500 страниц)Могут занимать значительный объём памяти; рассмотрите возможность потоковой передачи страниц с помощью Document.save(output_stream, options).


В: Как применить лицензионный ключ и какие модели лицензирования доступны?

О: Примените лицензию перед использованием других классов Aspose.TeX. Укажите путь к лицензии в ASPOSE_TEX_PYTHON_NET_LICENSE_PATH или поместите Aspose.TeX.Python-net.lic в рабочий каталог.

 1# Apply a license from a file before using other Aspose.TeX classes.
 2import os
 3from aspose.tex import License
 4
 5# Set this environment variable, or place the license in the working directory.
 6license_path = os.environ.get(
 7    "ASPOSE_TEX_PYTHON_NET_LICENSE_PATH", "Aspose.TeX.Python-net.lic"
 8)
 9license = License()
10license.set_license(license_path)

Примеры загрузки лицензии из файла и потока, Metered-лицензирования и ограничения ознакомительной версии приведены в разделе Лицензирование.

В: Является ли библиотека потокобезопасной для параллельных преобразований?

О: Да, при условии, что каждый поток создаёт свой собственный экземпляр «Документа». Статические объекты, такие как «Лицензия», должны быть установлены до начала любой параллельной работы.


В: Какая версия среды выполнения .NET требуется для AsposeTeXforPython?

О: Пакет поставляется с двоичными файлами среды выполнения .NET6 (x64). Они автоматически загружаются Pythonnet при первом импорте; вам не нужно устанавливать .NET вручную.


В: Как настроить размер страницы, ориентацию и разрешение на дюйм для растровых изображений?

A: Задайте размер и ориентацию страницы в исходном коде LaTeX. Например, сохраните этот документ A4 с альбомной ориентацией как landscape.ltx:

1\documentclass{article}
2\usepackage[a4paper,landscape]{geometry}
3\begin{document}
4Hello, World!
5\end{document}

Установите PngSaveOptions.resolution до передачи параметров сохранения заданию. В примере используется 300 DPI. Укажите landscape.ltx в ASPOSE_TEX_INPUT_FILE, а выходной каталог — в ASPOSE_TEX_OUTPUT_DIR, либо используйте пути по умолчанию:

 1# Convert an A4 landscape LaTeX document to PNG at 300 DPI.
 2import os
 3from pathlib import Path
 4from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 5from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 6from aspose.tex.presentation.image import ImageDevice, PngSaveOptions
 7
 8# Set these paths to your LaTeX document and output directory.
 9input_file = Path(os.environ.get("ASPOSE_TEX_INPUT_FILE", "landscape.ltx")).resolve()
10output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
11if not input_file.is_file():
12    raise FileNotFoundError(input_file)
13output_dir.mkdir(parents=True, exist_ok=True)
14
15# Use the Object LaTeX format and resolve additional inputs beside the main file.
16options = TeXOptions.console_app_options(TeXConfig.object_latex)
17options.input_working_directory = InputFileSystemDirectory(str(input_file.parent))
18options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
19options.interaction = Interaction.NONSTOP_MODE
20options.terminal_out = OutputMemoryTerminal()
21# Page size and orientation are defined in the LaTeX input (geometry package).
22# Set the raster resolution in dots per inch.
23save_options = PngSaveOptions()
24save_options.resolution = 300
25options.save_options = save_options
26device = ImageDevice(True)
27job_result = TeXJob(str(input_file), device, options).run()

Результат — landscape.png размером примерно 3508 × 2480 пикселей.

В: Могу ли я визуализировать LaTeX непосредственно из строки или потока в памяти?

О: Закодируйте полный документ LaTeX в двоичный поток BytesIO и передайте его в TeXJob с TeXConfig.object_latex. Сохраняйте поток открытым во время задания. Результат: texput.xps и texput.log. Укажите выходной каталог в ASPOSE_TEX_OUTPUT_DIR (по умолчанию output). Предварительно примените лицензию. Licensing.

 1# Render LaTeX supplied as a binary in-memory stream to XPS.
 2import os
 3from pathlib import Path
 4from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 5from io import BytesIO
 6from aspose.tex.io import OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.interaction = Interaction.NONSTOP_MODE
14options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
15options.terminal_out = OutputMemoryTerminal()
16latex_source = r"\documentclass{article} \begin{document} Hello, World! \end{document}"
17device = XpsDevice()
18with BytesIO(latex_source.encode("ascii")) as input_stream:
19    job_result = TeXJob(input_stream, device, options).run()


В: Где я могу найти официальную документацию, примеры кода и каналы поддержки?

О: Проверьте следующие ресурсы:

Все примеры доступны как на Python, так и на C#; код C# можно напрямую перевести благодаря pythonnet.