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
- Convierta documentos XPS/OXPS a formato JPG
- Convierta documentos XPS/OXPS a formato PNG
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.
- Inicialice una secuencia con el archivo XPS/OXPS de origen.
- Cree una instancia de la clase XpsDocument usando la transmisión XPS/OXPS.
- Cree una instancia de la clase JpegSaveOptions.
- Especifique opciones como SmoothingMode y Resolution.
- Cree una instancia de la clase ImageDevice.
- Guarde el documento XPS/OXPS en ImageDevice usando XpsDocument->Save(System::SharedPtr dispositivo, System::PtrCompartido opciones) método.
- Iterar a través de las particiones del documento.
- Inicialice el flujo de salida y guarde las imágenes 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());
}
}
Convierta documentos XPS/OXPS a formato PNG
Los siguientes son los pasos para convertir documentos XPS y OXPS a formato PNG.
- Inicialice una secuencia con el archivo XPS/OXPS de origen.
- Cree una instancia de la clase XpsDocument usando la transmisión XPS/OXPS.
- Cree una instancia de la clase PngSaveOptions.
- Especifique opciones como SmoothingMode y Resolution.
- Cree una instancia de la clase ImageDevice.
- Guarde el documento XPS/OXPS en ImageDevice usando XpsDocument->Save(System::SharedPtr dispositivo, System::PtrCompartido opciones) método.
- Iterar a través de las particiones del documento.
- Inicialice el flujo de salida y guarde las imágenes 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());
}
}
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.