Konvertera XPS, OXPS till JPG eller PNG-bild med C++

XPS- och OXPS-dokument liknar PDF-filer och definierar layout, utseende och utskriftsinformation för ett dokument. Det kan finnas scenarier där du kan behöva konvertera XPS- och OXPS-dokument till bildformaten JPG och PNG. För detta ändamål kommer den här artikeln att lära dig hur du konverterar XPS- och OXPS-dokument till JPG- och PNG-bildformat med C++.

C++ API för att konvertera XPS-, OXPS-filer till JPG- eller PNG-format

Aspose.Page for C++ är ett C++-bibliotek för att rendera och manipulera XPS- och PostScript-filer. Det låter dig skapa, läsa och uppdatera XPS-dokument. Dessutom stöder API:et konvertering av XPS- och OXPS-dokument till JPG- och PNG-bildformat. Du kan antingen installera API:t genom NuGet eller ladda ner det direkt från avsnittet downloads.

PM> Install-Package Aspose.Page.Cpp

Konvertera XPS/OXPS-dokument till JPG-format

Följande är stegen för att konvertera XPS- och OXPS-dokument till JPG-format.

Följande exempelkod visar hur du konverterar XPS/OXPS-dokument till JPG-format med C++.

// Indatafil
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Utdatafil 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// Initiera XPS-indataström
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Rensa resurser under "använder" uttalande
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// Ladda XPS-dokument från strömmen
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// eller ladda XPS-dokument direkt från filen. Då behövs ingen xpsStream.
		// XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Initiera JpegSaveOptions-objektet med nödvändiga parametrar.
		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; 
		}();

		// Skapa renderingsenhet för JPG-format
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Iterera genom dokumentpartitioner (fasta dokument, i XPS-termer)
		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++)
			{
				// Initiera bildutgångsström
				{
					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);
					// Rensa resurser under "använder" uttalande
					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());
	}
}
JPG-bild genererad av exempelkoden

JPG-bild genererad av exempelkoden

Konvertera XPS/OXPS-dokument till PNG-format

Följande är stegen för att konvertera XPS- och OXPS-dokument till PNG-format.

Följande exempelkod visar hur du konverterar XPS/OXPS-dokument till PNG-format med C++.

// Indatafil
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Utdatafil 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// Initiera XPS-indataström
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Rensa resurser under "använder" uttalande
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// Ladda XPS-dokument från strömmen
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// eller ladda XPS-dokument direkt från filen. Då behövs ingen xpsStream.
		// XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Initiera PngSaveOptions-objektet med nödvändiga parametrar.
		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; 
		}();

		// Skapa renderingsenhet för PNG-format
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Iterera genom dokumentpartitioner (fasta dokument, i XPS-termer)
		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++)
			{
				// Initiera bildutgångsström
				{
					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);
					// Rensa resurser under "använder" uttalande
					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 genererad av exempelkoden

PNG-bild genererad av exempelkoden

Skaffa en gratis licens

Du kan prova API:et utan utvärderingsbegränsningar genom att begära en gratis tillfällig licens.

Slutsats

I den här artikeln har du lärt dig hur du konverterar XPS- och OXPS-dokument till JPG- och PNG-bildformat med C++. Dessutom tillhandahåller Aspose.Page för C++ API olika ytterligare format som du kan använda. Du kan utforska API:et i detalj genom att besöka den officiella dokumentationen. Om du har några frågor är du välkommen att kontakta oss på vårt gratis supportforum.

Se även