LaTeX у PDF | Python через .NET

Перетворення LaTeX у PDF

Тепер давайте детально розглянемо код Python, який пропонує найпростіший підхід до перетворення LaTeX у формат PDF.

Укажіть шлях до файлу 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()

Для початку нам потрібно створити екземпляр класу TeXOptions. Метод console_app_options() є єдиним статичним методом, який виконує це, тому не турбуйтеся про його назву. Цей метод використовує екземпляр object_latex класу TeXConfig, який ідеально підходить для перетворення файлу LaTeX. Ця конфігурація наказує механізму Object TeX завантажити формат Object LaTeX і підготуватися до обробки файлу LaTeX. Формат Object LaTeX по суті такий же, як і формат LaTeX, але він використовує специфічні примітиви Object TeX для визначення показників сторінки.

Перший параметр, який потрібно вказати, це output_working_directory, який визначає місце, де буде збережено вихід TeX. Якщо потрібно, ви можете знайти більше інформації про концепцію вихідного каталогу в Aspose.TeX. У цьому конкретному випадку ми використовуємо клас OutputFileSystemDirectory, який дозволяє нам записувати вихідні дані у визначений каталог або папку.

Для другого варіанту потрібен екземпляр класу SaveOptions, який визначає, як об’єктна модель перетворюється на потрібний формат. У нашому випадку, коли ми перетворюємо LaTeX у PDF, це посилається на екземпляр класу PdfSaveOptions.

Щоб перетворити файл LaTeX, який зберігається у файловій системі, нам потрібно створити екземпляр класу TeXJob за допомогою constructor , який приймає повний шлях до файлу як параметр. Якщо ми не вкажемо повний шлях, механізм шукатиме файл у поточному каталозі (який є робочим каталогом сценарію) і може не знайти його. Однак ми можемо опустити розширення, якщо наш файл має розширення .tex, оскільки система автоматично додасть його. Другим аргументом конструктора є екземпляр класу Device. У нашому випадку, оскільки ми перетворюємо LaTeX у PDF, це екземпляр класу PdfDevice. Нарешті, ми передаємо нещодавно підготовлені параметри перетворення як останній аргумент.

Тепер залишається лише запустити роботу.

Приклад зберігає виведення термінала в OutputMemoryTerminal. Вихідний каталог також містить журнал .log. За успішного перетворення журнал має приблизно такий вигляд; відомості про версію можуть відрізнятися:

 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.pdf (1 page).
13Transcript written on hello-world.log.

У папці, яку ми вказали як вихідний каталог, серед інших результатів роботи движка ми знайдемо файл стенограми і, ось він!, основний вихідний PDF-файл.

Альтернативний спосіб запису основного вихідного файлу PDF

Клас PdfDevice має ще один конструктор, який дозволяє нам отримувати кінцевий PDF-файл інакше.

 1# Convert LaTeX to PDF using an explicitly named binary output stream.
 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()
22
23# Supply a binary stream to choose the output filename.
24with (output_dir / "any-name.pdf").open("wb") as output_stream:
25    device = PdfDevice(output_stream)
26    job_result = TeXJob(str(input_file), device, options).run()

Двійковий потік записує any-name.pdf у налаштований вихідний каталог. Додатковий файл PDF із типовим ім’ям не створюється; допоміжні файли та журнал і надалі зберігаються в output_working_directory.

Про параметри введення

Якщо наш основний вхідний файл потребує залежностей, таких як Пакети, які не входять до базової системи LaTeX, і підтримувані Пакети, необхідно встановити опцію required_input_directory подібним чином, як ми встановлюємо опцію output_working_directory і розмістіть залежності в цьому каталозі. Залежності можна організовувати у підкаталоги за бажанням. Крім того, якщо у нас є власні файли для включення в процес верстки, наприклад зовнішні графічні файли, ми також повинні встановити input_working_directory, використовуючи шлях до місця, де зберігаються ці файли. Ми також можемо розмістити головний вхідний файл у вхідному каталозі та вказати відносний шлях у конструкторі TeXJob або взагалі не вказати шлях, якщо основний вхідний файл знаходиться в корені. Щоб отримати докладніші відомості про концепцію каталогу введення в Aspose.TeX для Python і надані реалізації, зверніться до тут.

Також обговорюються інші варіанти завдань TeX.

Ви також можете дослідити безкоштовну веб-програму для перетворення LaTeX у PDF, яка розроблена за допомогою Aspose.TeX для .NET API.