Convertissez XPS, OXPS en image JPG ou PNG en utilisant C++

Les documents XPS et OXPS sont similaires aux fichiers PDF et définissent la mise en page, l’apparence et les informations d’impression d’un document. Dans certains cas, vous devrez peut-être convertir des documents XPS et OXPS aux formats d’image JPG et PNG. À cette fin, cet article vous apprendra comment convertir des documents XPS et OXPS au format d’image JPG et PNG à l’aide de C++.

API C++ pour la conversion de fichiers XPS, OXPS au format JPG ou PNG

Aspose.Page pour C++ est une bibliothèque C++ pour le rendu et la manipulation de fichiers XPS et PostScript. Il vous permet de créer, lire et mettre à jour des documents XPS. De plus, l’API prend en charge la conversion de documents XPS et OXPS aux formats d’image JPG et PNG. Vous pouvez soit installer l’API via NuGet ou la télécharger directement à partir de la section downloads.

PM> Install-Package Aspose.Page.Cpp

Convertir des documents XPS/OXPS au format JPG

Voici les étapes pour convertir des documents XPS et OXPS au format JPG.

L’exemple de code suivant montre comment convertir des documents XPS/OXPS au format JPG à l’aide de C++.

// Fichier d'entrée
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Fichier de sortie 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// Initialiser le flux d'entrée XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Effacement des ressources sous l'instruction 'using'
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// Charger le document XPS à partir du flux
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// ou chargez le document XPS directement à partir du fichier. Aucun xpsStream n'est alors nécessaire.
		// Document XpsDocument = nouveau XpsDocument(inputFileName, new XpsLoadOptions());

		// Initialisez l'objet JpegSaveOptions avec les paramètres nécessaires.
		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; 
		}();

		// Créer un périphérique de rendu pour le format JPG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Itérer à travers les partitions de documents (documents fixes, en termes 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++)
			{
				// Initialiser le flux de sortie d'image
				{
					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);
					// Effacement des ressources sous l'instruction 'using'
					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());
	}
}
Image JPG générée par l'exemple de code

Image JPG générée par l’exemple de code

Convertir des documents XPS/OXPS au format PNG

Voici les étapes pour convertir des documents XPS et OXPS au format PNG.

L’exemple de code suivant montre comment convertir des documents XPS/OXPS au format PNG à l’aide de C++.

// Fichier d'entrée
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Fichier de sortie 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// Initialiser le flux d'entrée XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Effacement des ressources sous l'instruction 'using'
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// Charger le document XPS à partir du flux
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// ou chargez le document XPS directement à partir du fichier. Aucun xpsStream n'est alors nécessaire.
		// Document XpsDocument = nouveau XpsDocument(inputFileName, new XpsLoadOptions());

		// Initialisez l'objet PngSaveOptions avec les paramètres nécessaires.
		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; 
		}();

		// Créer un périphérique de rendu pour le format PNG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Itérer à travers les partitions de documents (documents fixes, en termes 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++)
			{
				// Initialiser le flux de sortie d'image
				{
					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);
					// Effacement des ressources sous l'instruction 'using'
					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());
	}
}
Image PNG générée par l'exemple de code

Image PNG générée par l’exemple de code

Obtenez une licence gratuite

Vous pouvez essayer l’API sans limitation d’évaluation en demandant une licence temporaire gratuite.

Conclusion

Dans cet article, vous avez appris à convertir des documents XPS et OXPS aux formats d’image JPG et PNG à l’aide de C++. De plus, Aspose.Page for C++ fournit divers formats supplémentaires que vous pouvez utiliser. Vous pouvez explorer l’API en détail en visitant la documentation officielle. En cas de questions, n’hésitez pas à nous contacter sur notre forum d’assistance gratuit.

Voir également