Konversi XPS, OXPS ke JPG atau PNG Image menggunakan C++

Dokumen XPS dan OXPS mirip dengan file PDF dan menentukan tata letak, tampilan, dan informasi pencetakan untuk dokumen. Mungkin ada skenario di mana Anda mungkin perlu mengonversi dokumen XPS dan OXPS ke format gambar JPG dan PNG. Untuk itu, artikel ini akan mengajarkan Anda cara mengonversi dokumen XPS dan OXPS ke format gambar JPG dan PNG menggunakan C++.

C++ API untuk Mengonversi File XPS, OXPS ke Format JPG atau PNG

Aspose.Page for C++ adalah pustaka C++ untuk merender dan memanipulasi file XPS dan PostScript. Ini memungkinkan Anda membuat, membaca, dan memperbarui dokumen XPS. Selain itu, API mendukung konversi dokumen XPS dan OXPS ke format gambar JPG dan PNG. Anda dapat menginstal API melalui NuGet atau mengunduhnya langsung dari bagian unduhan.

PM> Install-Package Aspose.Page.Cpp

Konversikan Dokumen XPS/OXPS ke Format JPG

Berikut langkah-langkah untuk mengubah dokumen XPS dan OXPS ke format JPG.

Kode contoh berikut menunjukkan cara mengonversi dokumen XPS/OXPS ke format JPG menggunakan C++.

// berkas masukan
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Berkas keluaran 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// Inisialisasi aliran input XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Menghapus sumber daya di bawah pernyataan 'menggunakan'
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------------

	try
	{
		// Muat dokumen XPS dari aliran
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// atau muat dokumen XPS langsung dari file. Tidak diperlukan xpsStream.
		// Dokumen XpsDocument = XpsDocument baru(inputFileName, XpsLoadOptions baru());

		// Inisialisasi objek JpegSaveOptions dengan parameter yang diperlukan.
		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; 
		}();

		// Buat perangkat rendering untuk format JPG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Iterasi melalui partisi dokumen (dokumen tetap, dalam istilah 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++)
			{
				// Inisialisasi aliran keluaran gambar
				{
					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);
					// Menghapus sumber daya di bawah pernyataan 'menggunakan'
					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());
	}
}
Gambar JPG dihasilkan oleh kode sampel

Gambar JPG dihasilkan oleh kode sampel

Konversikan Dokumen XPS/OXPS ke Format PNG

Berikut langkah-langkah untuk mengubah dokumen XPS dan OXPS ke format PNG.

Kode contoh berikut menunjukkan cara mengonversi dokumen XPS/OXPS ke format PNG menggunakan C++.

// berkas masukan
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Berkas keluaran 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// Inisialisasi aliran input XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Menghapus sumber daya di bawah pernyataan 'menggunakan'
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------------

	try
	{
		// Muat dokumen XPS dari aliran
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// atau muat dokumen XPS langsung dari file. Tidak diperlukan xpsStream.
		// Dokumen XpsDocument = XpsDocument baru(inputFileName, XpsLoadOptions baru());

		// Inisialisasi objek PngSaveOptions dengan parameter yang diperlukan.
		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; 
		}();

		// Buat perangkat rendering untuk format PNG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Iterasi melalui partisi dokumen (dokumen tetap, dalam istilah 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++)
			{
				// Inisialisasi aliran keluaran gambar
				{
					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);
					// Menghapus sumber daya di bawah pernyataan 'menggunakan'
					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());
	}
}
Gambar PNG dihasilkan oleh kode sampel

Gambar PNG dihasilkan oleh kode sampel

Dapatkan Lisensi Gratis

Anda dapat mencoba API tanpa batasan evaluasi dengan meminta lisensi sementara gratis.

Kesimpulan

Pada artikel ini, Anda telah mempelajari cara mengonversi dokumen XPS dan OXPS ke format gambar JPG dan PNG menggunakan C++. Selanjutnya, Aspose.Page for C++ API menyediakan berbagai format tambahan untuk Anda gunakan. Anda dapat menjelajahi API secara mendetail dengan mengunjungi dokumentasi resmi. Jika ada pertanyaan, jangan ragu untuk menghubungi kami di [forum dukungan gratis] kami25.

Lihat juga