Konvertieren Sie XPS, OXPS in JPG oder PNG Bilder mit C++

XPS und OXPS Dokumente ähneln PDF Dateien und definieren das Layout, das Aussehen und die Druckinformationen für ein Dokument. Es kann Szenarien geben, in denen Sie XPS und OXPS Dokumente in die Bildformate JPG und PNG konvertieren müssen. Zu diesem Zweck lernen Sie in diesem Artikel, wie Sie XPS und OXPS Dokumente mit C++ in das JPG und PNG Bildformat konvertieren.

C++-API zum Konvertieren von XPS, OXPS Dateien in das JPG oder PNG Format

Aspose.Page for C++ ist eine C++ Bibliothek zum Rendern und Bearbeiten von XPS und PostScript Dateien. Damit können Sie XPS Dokumente erstellen, lesen und aktualisieren. Darüber hinaus unterstützt die API die Konvertierung von XPS und OXPS Dokumenten in JPG und PNG Bildformate. Sie können die API entweder über NuGet installieren oder direkt aus dem Abschnitt downloads herunterladen.

PM> Install-Package Aspose.Page.Cpp

Konvertieren Sie XPS/OXPS Dokumente in das JPG Format

Im Folgenden finden Sie die Schritte zum Konvertieren von XPS und OXPS Dokumenten in das JPG-Format.

Der folgende Beispielcode zeigt, wie XPS/OXPS Dokumente mit C++ in das JPG Format konvertiert werden.

// Eingabedatei
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Ausgabedatei 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// XPS-Eingabestream initialisieren
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Löschen von Ressourcen unter der 'using'-Anweisung
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// XPS-Dokument aus dem Stream laden
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// oder XPS-Dokument direkt aus Datei laden. Dann wird kein xpsStream benötigt.
		// XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Initialisieren Sie das JpegSaveOptions objekt mit den erforderlichen Parametern.
		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; 
		}();

		// Erstellen Sie ein Rendering-Gerät für das JPG-Format
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Dokumentpartitionen durchlaufen (feste Dokumente in XPS-Begriffen)
		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++)
			{
				// Bildausgabestrom initialisieren
				{
					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);
					// Löschen von Ressourcen unter der 'using'-Anweisung
					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());
	}
}
Vom Beispielcode generiertes JPG Bild

Vom Beispielcode generiertes JPG Bild

Konvertieren Sie XPS/OXPS Dokumente in das PNG Format

Im Folgenden sind die Schritte zum Konvertieren von XPS und OXPS Dokumenten in das PNG Format aufgeführt.

Der folgende Beispielcode zeigt, wie XPS/OXPS Dokumente mit C++ in das PNG Format konvertiert werden.

// Eingabedatei
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Ausgabedatei 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// XPS-Eingabestream initialisieren
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Löschen von Ressourcen unter der 'using'-Anweisung
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// XPS-Dokument aus dem Stream laden
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// oder XPS-Dokument direkt aus Datei laden. Dann wird kein xpsStream benötigt.
		// XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Initialisieren Sie das PngSaveOptions objekt mit den erforderlichen Parametern.
		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; 
		}();

		// Erstellen Sie ein Rendering-Gerät für das PNG-Format
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Dokumentpartitionen durchlaufen (feste Dokumente in XPS-Begriffen)
		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++)
			{
				// Bildausgabestrom initialisieren
				{
					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);
					// Löschen von Ressourcen unter der 'using'-Anweisung
					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());
	}
}
PNG Bild, das vom Beispielcode generiert wird

PNG Bild, das vom Beispielcode generiert wird

Holen Sie sich eine kostenlose Lizenz

Sie können die API ohne Evaluierungseinschränkungen testen, indem Sie eine kostenlose temporäre Lizenz anfordern.

Fazit

In diesem Artikel haben Sie gelernt, wie Sie XPS und OXPS Dokumente mit C++ in JPG und PNG Bildformate konvertieren. Darüber hinaus bietet Aspose.Page für die C++-API verschiedene zusätzliche Formate, die Sie verwenden können. Sie können die API im Detail erkunden, indem Sie die offizielle Dokumentation besuchen. Bei Fragen können Sie sich gerne in unserem kostenlosen Support-Forum an uns wenden.

Siehe auch