Convierta archivos XPS u OXPS a formato PDF usando C++

Los documentos XPS y OXPS definen el diseño, la apariencia y la información de impresión. Estos documentos son similares a los archivos PDF. Debido a la gran popularidad del formato PDF, es posible que se encuentre en situaciones en las que necesite convertir documentos XPS y OXPS a formato PDF. Con ese fin, este artículo le enseñará cómo convertir documentos XPS y OXPS a formato PDF usando C++.

API de C++ para convertir documentos XPS y OXPS a formato PDF

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 formato PDF. 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 PDF

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

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

// Archivo de salida
System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(u"OutputDirectory\\XPStoPDF.pdf", System::IO::FileMode::Create, System::IO::FileAccess::Write);
// Borrar recursos bajo la declaración 'usando'
System::Details::DisposeGuard<1> __dispose_guard_1({ pdfStream });
// ------------------------------------------------------------------------
try {
	// Archivo fuente
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(u"SourceDirectory\\sample.xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Borrar recursos bajo la declaración 'usando'
	System::Details::DisposeGuard<1> __dispose_guard_0({ 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 PdfSaveOptions con los parámetros necesarios.
		System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfSaveOptions> options = [&] {
			auto tmp_0 = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfSaveOptions>();
			tmp_0->set_JpegQualityLevel(100);
			tmp_0->set_ImageCompression(Aspose::Page::XPS::Presentation::Pdf::PdfImageCompression::Jpeg);
			tmp_0->set_TextCompression(Aspose::Page::XPS::Presentation::Pdf::PdfTextCompression::Flate);
			return tmp_0;
		}();

		// Crear dispositivo de renderizado para formato PDF
		System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfDevice> device = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfDevice>(pdfStream);

		// Guardar archivo PDF
		document->Save(device, options);
	}
	catch (...)
	{
		__dispose_guard_0.SetCurrentException(std::current_exception());
	}
}
catch (...)
{
	__dispose_guard_1.SetCurrentException(std::current_exception());
}
Imagen del archivo PDF de salida generado por el código de muestra

Imagen del archivo PDF de salida generado por el código de muestra

Convertir páginas seleccionadas de documentos XPS/OXPS a formato PDF

Al convertir archivos XPS y OXPS a formato PDF, también puede especificar las páginas que desea convertir. El archivo PDF de salida contendrá solo las páginas que seleccione. Para lograr esto, siga los pasos que se indican a continuación.

El siguiente código de ejemplo muestra cómo convertir páginas seleccionadas de documentos XPS y OXPS a formato PDF mediante C++.

// Archivo de salida
System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(u"OutputDirectory\\XPStoPDF.pdf", System::IO::FileMode::Create, System::IO::FileAccess::Write);
// Borrar recursos bajo la declaración 'usando'
System::Details::DisposeGuard<1> __dispose_guard_1({ pdfStream });
// ------------------------------------------------------------------------
try {
	// Archivo fuente
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(u"SourceDirectory\\sample.xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Borrar recursos bajo la declaración 'usando'
	System::Details::DisposeGuard<1> __dispose_guard_0({ 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 PdfSaveOptions con los parámetros necesarios.
		System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfSaveOptions> options = [&] {
			auto tmp_0 = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfSaveOptions>();
			tmp_0->set_JpegQualityLevel(100);
			tmp_0->set_ImageCompression(Aspose::Page::XPS::Presentation::Pdf::PdfImageCompression::Jpeg);
			tmp_0->set_TextCompression(Aspose::Page::XPS::Presentation::Pdf::PdfTextCompression::Flate);
			tmp_0->set_PageNumbers(System::MakeArray<int32_t>({ 1, 3 }));
			return tmp_0;
		}();

		// Crear dispositivo de renderizado para formato PDF
		System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfDevice> device = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfDevice>(pdfStream);

		// Guardar archivo PDF
		document->Save(device, options);
	}
	catch (...)
	{
		__dispose_guard_0.SetCurrentException(std::current_exception());
	}
}
catch (...)
{
	__dispose_guard_1.SetCurrentException(std::current_exception());
}
Imagen del archivo PDF de salida generado por el código de muestra

Imagen del archivo PDF de salida generado 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, aprendió cómo convertir documentos XPS y OXPS a formato PDF usando C++. Además, ha visto cómo convertir páginas seleccionadas de los documentos XPS/OXPS a formato PDF utilizando Aspose.Page for C++. La API proporciona muchas características adicionales para trabajar con documentos XPS que puede explorar 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