Os documentos XPS e OXPS são semelhantes aos arquivos PDF e definem o layout, a aparência e as informações de impressão de um documento. Pode haver cenários em que você precise converter documentos XPS e OXPS para os formatos de imagem JPG e PNG. Para isso, este artigo ensinará como converter documentos XPS e OXPS para o formato de imagem JPG e PNG usando C++.
- API C++ para converter arquivos XPS, OXPS para o formato JPG ou PNG
- Converter documentos XPS/OXPS para o formato JPG
- Converter documentos XPS/OXPS para o formato PNG
API C++ para converter arquivos XPS, OXPS para o formato JPG ou PNG
Aspose.Page for C++ é uma biblioteca C++ para renderização e manipulação de arquivos XPS e PostScript. Permite criar, ler e atualizar documentos XPS. Além disso, a API suporta a conversão de documentos XPS e OXPS para os formatos de imagem JPG e PNG. Você pode instalar a API por meio do NuGet ou baixá-la diretamente da seção downloads.
PM> Install-Package Aspose.Page.Cpp
Converter documentos XPS/OXPS para o formato JPG
A seguir estão as etapas para converter documentos XPS e OXPS para o formato JPG.
- Inicialize um fluxo com o arquivo XPS/OXPS de origem.
- Crie uma instância da classe XpsDocument usando o fluxo XPS/OXPS.
- Crie uma instância da classe JpegSaveOptions.
- Especifique opções como SmoothingMode e Resolution.
- Crie uma instância da classe ImageDevice.
- Salve o documento XPS/OXPS no ImageDevice usando XpsDocument->Save(System::SharedPtr dispositivo, System::SharedPtr opções) método.
- Iterar pelas partições do documento.
- Inicialize o fluxo de saída e salve as imagens JPG.
O código de exemplo a seguir mostra como converter documentos XPS/OXPS para o formato JPG usando C++.
// Arquivo de entrada
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Arquivo de saída
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// Inicializar o fluxo de entrada XPS
{
System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
// Limpando recursos sob a instrução 'usando'
System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
// ------------------------------------------
try
{
// Carregar documento XPS do stream
System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
// ou carregue o documento XPS diretamente do arquivo. Nenhum xpsStream é necessário então.
// Documento XpsDocument = new XpsDocument(inputFileName, new XpsLoadOptions());
// Inicialize o objeto JpegSaveOptions com os parâmetros necessários.
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;
}();
// Criar dispositivo de renderização para o formato JPG
System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();
document->Save(device, options);
// Iterar através de partições de documentos (documentos fixos, em termos 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 o fluxo de saída de imagem
{
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);
// Limpando recursos sob a instrução '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());
}
}
Converter documentos XPS/OXPS para o formato PNG
A seguir estão as etapas para converter documentos XPS e OXPS para o formato PNG.
- Inicialize um fluxo com o arquivo XPS/OXPS de origem.
- Crie uma instância da classe XpsDocument usando o fluxo XPS/OXPS.
- Crie uma instância da classe PngSaveOptions.
- Especifique opções como SmoothingMode e Resolution.
- Crie uma instância da classe ImageDevice.
- Salve o documento XPS/OXPS no ImageDevice usando XpsDocument->Save(System::SharedPtr dispositivo, System::SharedPtr opções) método.
- Iterar pelas partições do documento.
- Inicialize o fluxo de saída e salve as imagens PNG.
O código de exemplo a seguir mostra como converter documentos XPS/OXPS para o formato PNG usando C++.
// Arquivo de entrada
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Arquivo de saída
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// Inicializar o fluxo de entrada XPS
{
System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
// Limpando recursos sob a instrução 'usando'
System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
// ------------------------------------------
try
{
// Carregar documento XPS do stream
System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
// ou carregue o documento XPS diretamente do arquivo. Nenhum xpsStream é necessário então.
// Documento XpsDocument = new XpsDocument(inputFileName, new XpsLoadOptions());
// Inicialize o objeto PngSaveOptions com os parâmetros necessários.
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;
}();
// Criar dispositivo de renderização para o formato PNG
System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();
document->Save(device, options);
// Iterar através de partições de documentos (documentos fixos, em termos 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 o fluxo de saída de imagem
{
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);
// Limpando recursos sob a instrução '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());
}
}
Obtenha uma licença gratuita
Você pode experimentar a API sem limitações de avaliação solicitando uma licença temporária gratuita.
Conclusão
Neste artigo, você aprendeu como converter documentos XPS e OXPS em formatos de imagem JPG e PNG usando C++. Além disso, Aspose.Page for C++ API fornece vários formatos adicionais para você usar. Você pode explorar a API em detalhes visitando a documentação oficial. Em caso de dúvidas, sinta-se à vontade para entrar em contato conosco em nosso fórum de suporte gratuito.