Convierta imágenes XPS, OXPS a JPG o PNG usando C++

Los documentos XPS y OXPS son similares a los archivos PDF y definen el diseño, la apariencia y la información de impresión de un documento. Puede haber escenarios en los que necesite convertir documentos XPS y OXPS a formatos de imagen JPG y PNG. Con ese fin, este artículo le enseñará cómo convertir documentos XPS y OXPS a formato de imagen JPG y PNG usando C++.

API de C++ para convertir archivos XPS, OXPS a formato JPG o PNG

Aspose.Page for C++ es una biblioteca de C++ para renderizar y manipular archivos XPS y PostScript. Le permite crear, leer y actualizar documentos XPS. Además, la API admite la conversión de documentos XPS y OXPS a formatos de imagen JPG y PNG. Puede instalar la API a través de NuGet o descargarla directamente desde la sección descargas.

PM> Install-Package Aspose.Page.Cpp

Convierta documentos XPS/OXPS a formato JPG

Los siguientes son los pasos para convertir documentos XPS y OXPS a formato JPG.

El siguiente código de muestra muestra cómo convertir documentos XPS/OXPS a formato JPG usando C++.

// Fichero de entrada
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Archivo de salida 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// Inicializar flujo de entrada XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Borrar recursos bajo la declaración 'usando'
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------------------------------------

	try
	{
		// Cargue el documento XPS desde la secuencia
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// o cargue el documento XPS directamente desde el archivo. Entonces no se necesita xpsStream.
		// documento XpsDocument = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Inicialice el objeto JpegSaveOptions con los parámetros necesarios.
		System::SharedPtr<JpegSaveOptions> options = [&] { 
			auto tmp_0 = System::MakeObject<JpegSaveOptions>(); 
			tmp_0->set_SmoothingMode(System::Drawing::Drawing2D::SmoothingMode::HighQuality); 
			tmp_0->set_Resolution(300); 
			tmp_0->set_PageNumbers(System::MakeArray<int32_t>({ 1, 2, 6 })); 
			return tmp_0; 
		}();

		// Crear dispositivo de renderizado para formato JPG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Iterar a través de particiones de documentos (documentos fijos, en términos de XPS)
		for (int32_t i = 0; i < device->get_Result()->get_Length(); i++)
		{
			for (int32_t j = 0; j < device->get_Result()[i]->get_Length(); j++)
			{
				// Inicializar flujo de salida de imagen
				{
					System::SharedPtr<System::IO::Stream> imageStream = System::IO::File::Open(System::IO::Path::GetDirectoryName(outputFileName) + u"\\" + System::IO::Path::GetFileNameWithoutExtension(outputFileName) + u"_" + (i + 1) + u"_" + (j + 1) + System::IO::Path::GetExtension(outputFileName), System::IO::FileMode::Create, System::IO::FileAccess::Write);
					// Borrar recursos bajo la declaración 'usando'
					System::Details::DisposeGuard<1> __dispose_guard_0({ imageStream });
					// ------------------------------------------------------------------------

					try
					{
						imageStream->Write(device->get_Result()[i][j], 0, device->get_Result()[i][j]->get_Length());
					}
					catch (...)
					{
						__dispose_guard_0.SetCurrentException(std::current_exception());
					}
				}
			}
		}
	}
	catch (...)
	{
		__dispose_guard_1.SetCurrentException(std::current_exception());
	}
}
Imagen JPG generada por el código de muestra

Imagen JPG generada por el código de muestra

Convierta documentos XPS/OXPS a formato PNG

Los siguientes son los pasos para convertir documentos XPS y OXPS a formato PNG.

El siguiente código de ejemplo muestra cómo convertir documentos XPS/OXPS a formato PNG mediante C++.

// Fichero de entrada
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Archivo de salida 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// Inicializar flujo de entrada XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Borrar recursos bajo la declaración 'usando'
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------------------------------------

	try
	{
		// Cargue el documento XPS desde la secuencia
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// o cargue el documento XPS directamente desde el archivo. Entonces no se necesita xpsStream.
		// documento XpsDocument = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Inicialice el objeto PngSaveOptions con los parámetros necesarios.
		System::SharedPtr<PngSaveOptions> options = [&] { 
			auto tmp_0 = System::MakeObject<PngSaveOptions>(); 
			tmp_0->set_SmoothingMode(System::Drawing::Drawing2D::SmoothingMode::HighQuality); 
			tmp_0->set_Resolution(300); 
			tmp_0->set_PageNumbers(System::MakeArray<int32_t>({ 1, 2, 6 })); 
			return tmp_0; 
		}();

		// Crear dispositivo de renderizado para formato PNG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Iterar a través de particiones de documentos (documentos fijos, en términos de XPS)
		for (int32_t i = 0; i < device->get_Result()->get_Length(); i++)
		{
			for (int32_t j = 0; j < device->get_Result()[i]->get_Length(); j++)
			{
				// Inicializar flujo de salida de imagen
				{
					System::SharedPtr<System::IO::Stream> imageStream = System::IO::File::Open(System::IO::Path::GetDirectoryName(outputFileName) + u"\\" + System::IO::Path::GetFileNameWithoutExtension(outputFileName) + u"_" + (i + 1) + u"_" + (j + 1) + System::IO::Path::GetExtension(outputFileName), System::IO::FileMode::Create, System::IO::FileAccess::Write);
					// Borrar recursos bajo la declaración 'usando'
					System::Details::DisposeGuard<1> __dispose_guard_0({ imageStream });
					// ------------------------------------------------------------------------

					try
					{
						imageStream->Write(device->get_Result()[i][j], 0, device->get_Result()[i][j]->get_Length());
					}
					catch (...)
					{
						__dispose_guard_0.SetCurrentException(std::current_exception());
					}
				}
			}
		}
	}
	catch (...)
	{
		__dispose_guard_1.SetCurrentException(std::current_exception());
	}
}
Imagen PNG generada por el código de muestra

Imagen PNG generada por el código de muestra

Obtenga una licencia gratis

Puede probar la API sin limitaciones de evaluación solicitando una licencia temporal gratuita.

Conclusión

En este artículo, ha aprendido cómo convertir documentos XPS y OXPS a formatos de imagen JPG y PNG usando C++. Además, Aspose.Page for C++ proporciona varios formatos adicionales para su uso. Puede explorar la API en detalle visitando la documentación oficial. Si tiene alguna pregunta, no dude en comunicarse con nosotros en nuestro foro de soporte gratuito.

Ver también