LaTeX a la imagen | Aspose.TeX para C++

Aspose.TeX para C++ también nos permite convertir archivos LaTeX a otros formatos de imágenes rasterizadas.

Cómo convertir LaTeX a PNG

Echemos un vistazo detallado al código en C++ que proporciona la forma más sencilla de convertir LaTeX a formato PNG.

                
            

Entonces, lo primero que debemos hacer (bueno, a veces no lo primero) es crear una instancia de la clase TeXOptions. El único método estático que hace esto es ConsoleAppOptions(), así que no nos dejemos desconcertar por el significado de su nombre. El método toma la instancia get_ObjectLaTeX() de la clase TeXConfig, que es exactamente adecuada para convertir un archivo LaTeX. Esta configuración le dice al motor Object TeX que cargue el formato Object LaTeX y que esté listo para aceptar el archivo LaTeX. El formato Object LaTeX es en realidad solo el formato LaTeX, excepto que utiliza primitivas específicas de Object TeX para configurar las métricas de la página.

La primera de las opciones requeridas es OutputWorkingDirectory que define el espacio o área donde se escribirá la salida TeX. Aquí se encuentran los detalles sobre el concepto de directorio de salida en Aspose.TeX para C++. En este ejemplo, usamos la clase OutputFileSystemDirectory, que nos permite escribir la salida en el directorio o carpeta especificado.

La segunda opción es una instancia de clase SaveOptions que controlará la transformación del modelo de objeto al formato de destino. Dado que estamos convirtiendo LaTeX a PNG, es la instancia de clase PngSaveOptions, que nos permite especificar la resolución de las imágenes de salida.

A continuación, necesitamos crear una instancia de la clase TeXJob. Al querer convertir un archivo LaTeX almacenado en el sistema de archivos, utilizamos esta versión del constructor. Necesitamos especificar la ruta completa al archivo. De lo contrario, el motor lo buscará en el directorio actual (que es CurrentDirectory) y lo más probable es que no lo encuentre. No obstante, podremos omitir la extensión si nuestro archivo tiene la .tex. El motor lo agregará automáticamente. El segundo argumento del constructor es una instancia de clase Dispositivo. Dado que estamos convirtiendo LaTeX a PNG, es una instancia de clase ImageDevice (que es común a todos los formatos de imagen admitidos). Como último argumento, pasamos las opciones de conversión preparadas recientemente.

Todo lo que queda por hacer ahora es ejecutar el trabajo.

Independientemente de si la ejecución fue exitosa o no, el primer resultado que veremos será la salida del terminal. En caso de éxito, se verá así:

 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.

Encontraremos otros “frutos” del trabajo del motor en la carpeta que especificamos como directorio de salida. Esos serán el archivo de transcripción y, ¡aquí está!, los archivos de imagen PNG de salida principal.

Una forma alternativa de escribir los archivos PNG de salida principales

Hay otra forma de obtener datos de imagen como una matriz de matrices de bytes; cada matriz en la segunda dimensión representa datos de imagen para una página separada.

 1    // Create conversion options for Object LaTeX format on Object TeX engine extension.
 2    System::SharedPtr<TeXOptions> options = TeXOptions::ConsoleAppOptions(TeXConfig::get_ObjectLaTeX());
 3    // Specify the file system working directory for the output.
 4    options->set_OutputWorkingDirectory(System::MakeObject<OutputFileSystemDirectory>(RunExamples::OutputDirectory));
 5    // Initialize the options for saving in PNG format.
 6    options->set_SaveOptions(System::MakeObject<PngSaveOptions>());
 7    // Run LaTeX to PNG conversion.
 8    System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();
 9    System::MakeObject<TeXJob>(System::IO::Path::Combine(RunExamples::InputDirectory, u"hello-world.ltx"), device, options)->Run();
10    
11    // Save pages file by file.
12    for (int32_t i = 0; i < device->get_Result()->get_Length(); i++)
13    {
14        {
15            System::SharedPtr<System::IO::Stream> fs = System::IO::File::Open(System::IO::Path::Combine(RunExamples::OutputDirectory, System::String(u"page-") + (i + 1) + u".png"), System::IO::FileMode::Create);
16            // Clearing resources under 'using' statement
17            System::Details::DisposeGuard<1> __dispose_guard_0({ fs});
18            // ------------------------------------------
19            
20            try
21            {
22                fs->Write(device->get_Result()[i], 0, device->get_Result()[i]->get_Length());
23            }
24            catch(...)
25            {
26                __dispose_guard_0.SetCurrentException(std::current_exception());
27            }
28        }
29    }

Los archivos “page-n.png” se escribirán en cualquier ruta que especifiquemos. A diferencia de Salida PDF, duplicarán los archivos PNG de salida escritos en el directorio de salida.

Acerca de las opciones de entrada

En caso de que nuestro archivo de entrada principal requiera dependencias, por ejemplo, paquetes, que no están incluidos en el sistema LaTeX básico y los paquetes compatibles, DEBEMOS configurar la opción RequiredInputDirectory de la misma manera que configuramos OutputWorkingDirectory. opción y coloque las dependencias en ese directorio. Las dependencias pueden organizarse arbitrariamente en subdirectorios. En caso de que tengamos nuestros propios archivos para incluir durante el proceso de composición tipográfica, digamos archivos de gráficos externos, DEBEMOS también configurar InputWorkingDirectory usando la ruta a la ubicación donde se recopilan esos archivos. También podemos colocar el archivo de entrada principal en algún lugar dentro del directorio de entrada y especificar la ruta relativa en el método run() (o no especificar ninguna ruta si el archivo de entrada principal está en la raíz). Aquí se encuentran los detalles sobre el concepto de directorio de entrada en Aspose.TeX para C++ y las implementaciones proporcionadas.

Otras opciones de trabajo en TeX se analizan aquí.

También puede consultar la aplicación web gratuita de conversión de LaTeX a PNG creada en base a la API Aspose.TeX para .NET. Aquí está la página de la versión C++.

A continuación, analizamos la conversión de LaTeX a otros formatos de imágenes rasterizados compatibles. No entraremos en detalles sólo porque en realidad no hay ningún detalle. La única diferencia está en el tipo de propiedad SaveOptions en las opciones de conversión.

Cómo convertir LaTeX a JPEG

1...
2// Initialize the options for saving in JPEG format.
3options->set_SaveOptions(System::MakeObject<JpegSaveOptions>());

También puede consultar la aplicación web gratuita de conversión de LaTeX a JPEG creada en base a la API Aspose.TeX para .NET. Aquí es la página de la versión C++.

Cómo convertir LaTeX a TIFF

1...
2// Initialize the options for saving in TIFF format.
3options->set_SaveOptions(System::MakeObject<TiffSaveOptions>());

También puede consultar la aplicación web gratuita de conversión de LaTeX a TIFF creada en base a la API Aspose.TeX para .NET. Aquí es la página de la versión C++.

Cómo convertir LaTeX a BMP

1...
2// Initialize the options for saving in BMP format.
3options->set_SaveOptions(System::MakeObject<BmpSaveOptions>());

También puede consultar la aplicación web gratuita de conversión de LaTeX a BMP creada en base a la API Aspose.TeX para .NET. Aquí está la página de la versión C++.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.