Converti XPS, OXPS in immagini JPG o PNG usando C++

I documenti XPS e OXPS sono simili ai file PDF e definiscono il layout, l’aspetto e le informazioni di stampa per un documento. Potrebbero esserci scenari in cui potrebbe essere necessario convertire documenti XPS e OXPS in formati immagine JPG e PNG. A tal fine, questo articolo ti insegnerà come convertire documenti XPS e OXPS in formato immagine JPG e PNG usando C++.

API C++ per la conversione di file XPS, OXPS in formato JPG o PNG

Aspose.Page for C++ è una libreria C++ per il rendering e la manipolazione di file XPS e PostScript. Ti permette di creare, leggere e aggiornare documenti XPS. Inoltre, l’API supporta la conversione di documenti XPS e OXPS in formati immagine JPG e PNG. Puoi installare l’API tramite NuGet o scaricarla direttamente dalla sezione download.

PM> Install-Package Aspose.Page.Cpp

Converti documenti XPS/OXPS in formato JPG

Di seguito sono riportati i passaggi per convertire i documenti XPS e OXPS in formato JPG.

Il codice di esempio seguente mostra come convertire i documenti XPS/OXPS in formato JPG usando C++.

// File di input
System::String inputFileName = u"SourceDirectory\\sample.xps";
//File di uscita 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// Inizializza il flusso di input XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Cancellazione delle risorse nella dichiarazione "utilizzo".
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// --------------------------------------------

	try
	{
		// Carica il documento XPS dallo stream
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// o caricare il documento XPS direttamente dal file. Non è necessario xpsStream quindi.
		// XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Inizializza l'oggetto JpegSaveOptions con i parametri necessari.
		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; 
		}();

		// Crea un dispositivo di rendering per il formato JPG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Iterare attraverso le partizioni dei documenti (documenti fissi, in termini di 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++)
			{
				// Inizializza il flusso di output dell'immagine
				{
					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);
					// Cancellazione delle risorse nella dichiarazione "utilizzo".
					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());
	}
}
Immagine JPG generata dal codice di esempio

Immagine JPG generata dal codice di esempio

Converti documenti XPS/OXPS in formato PNG

Di seguito sono riportati i passaggi per convertire i documenti XPS e OXPS in formato PNG.

Il codice di esempio seguente mostra come convertire i documenti XPS/OXPS in formato PNG usando C++.

// File di input
System::String inputFileName = u"SourceDirectory\\sample.xps";
//File di uscita 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// Inizializza il flusso di input XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Cancellazione delle risorse nella dichiarazione "utilizzo".
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// --------------------------------------------

	try
	{
		// Carica il documento XPS dallo stream
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// o caricare il documento XPS direttamente dal file. Non è necessario xpsStream quindi.
		// XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Inizializza l'oggetto PngSaveOptions con i parametri necessari.
		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; 
		}();

		// Crea un dispositivo di rendering per il formato PNG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Iterare attraverso le partizioni dei documenti (documenti fissi, in termini di 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++)
			{
				// Inizializza il flusso di output dell'immagine
				{
					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);
					// Cancellazione delle risorse nella dichiarazione "utilizzo".
					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());
	}
}
Immagine PNG generata dal codice di esempio

Immagine PNG generata dal codice di esempio

Ottieni una licenza gratuita

Puoi provare l’API senza limitazioni di valutazione richiedendo una licenza temporanea gratuita.

Conclusione

In questo articolo, hai imparato come convertire documenti XPS e OXPS in formati immagine JPG e PNG usando C++. Inoltre, Aspose.Page per l’API C++ fornisce vari formati aggiuntivi da usare. Puoi esplorare l’API in dettaglio visitando la documentazione ufficiale. In caso di domande, non esitare a contattarci sul nostro forum di supporto gratuito.

Guarda anche