LaTeX в PDF | API-решение Aspose.TeX для C++

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

Давайте подробно рассмотрим код на C++, обеспечивающий простейший способ преобразования LaTeX в формат PDF.

                
            

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

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

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

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

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

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

 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    // Create the stream to write the XPS file to.
 2    {
 3        System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(System::IO::Path::Combine(RunExamples::OutputDirectory, u"any-name.pdf"), System::IO::FileMode::Create);
 4        // Clearing resources under 'using' statement
 5        System::Details::DisposeGuard<1> __dispose_guard_0({ pdfsStream});
 6        // ------------------------------------------
 7        
 8        try
 9        {
10            // Create conversion options for Object LaTeX format on Object TeX engine extension.
11            System::SharedPtr<TeXOptions> options = TeXOptions::ConsoleAppOptions(TeXConfig::get_ObjectLaTeX());
12            // Specify the file system working directory for the output.
13            options->set_OutputWorkingDirectory(System::MakeObject<OutputFileSystemDirectory>(RunExamples::OutputDirectory));
14            // Initialize the options for saving in PDF format.
15            options->set_SaveOptions(System::MakeObject<PdfSaveOptions>());
16            // Default value.
17            // Run LaTeX to XPS conversion.
18            System::MakeObject<TeXJob>(System::IO::Path::Combine(RunExamples::InputDirectory, u"hello-world.ltx"), System::MakeObject<PdfDevice>(pdfStream), options)->Run();
19        }
20        catch(...)
21        {
22            __dispose_guard_0.SetCurrentException(std::current_exception());
23        }
24    }

Файл any-name.pdf в указанном каталоге будет нашим основным выходным PDF-файлом. В то же время, в отличие от вывод изображения, мы не найдем никаких PDF-файлов в выходном каталоге, определенном параметрами преобразования. Исключение: any-name.pdf находится (по пути) в том же каталоге файловой системы, который назначен параметру OutputWorkingDirectory с помощью OutputFileSystemDirectory.

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

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

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

Вы также можете ознакомиться с бесплатным веб-приложением для преобразования LaTeX в PDF, созданным на основе Aspose.TeX for C++ API.

Have any questions about Aspose.TeX?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.