با استفاده از C++ تصویر XPS، OXPS را به JPG یا PNG تبدیل کنید

اسناد XPS و OXPS شبیه فایل‌های PDF هستند و طرح‌بندی، ظاهر و اطلاعات چاپ را برای یک سند تعریف می‌کنند. ممکن است سناریوهایی وجود داشته باشد که ممکن است لازم باشد اسناد XPS و OXPS را به فرمت‌های تصویر JPG و PNG تبدیل کنید. برای این منظور، این مقاله به شما آموزش می دهد که چگونه اسناد XPS و OXPS را با استفاده از C++ به فرمت تصویر JPG و PNG تبدیل کنید.

C++ API برای تبدیل فایل های XPS، OXPS به فرمت JPG یا PNG

Aspose.Page برای C++ یک کتابخانه C++ برای ارائه و دستکاری فایل‌های XPS و PostScript است. این به شما امکان می دهد اسناد XPS را ایجاد، بخوانید و به روز کنید. علاوه بر این، API از تبدیل اسناد XPS و OXPS به فرمت های تصویری JPG و PNG پشتیبانی می کند. می‌توانید API را از طریق NuGet نصب کنید یا آن را مستقیماً از بخش دانلودها دانلود کنید.

PM> Install-Package Aspose.Page.Cpp

تبدیل اسناد XPS/OXPS به فرمت JPG

در زیر مراحل تبدیل اسناد XPS و OXPS به فرمت JPG آمده است.

  • یک جریان را با فایل منبع XPS/OXPS راه اندازی کنید.
  • با استفاده از جریان XPS/OXPS یک نمونه از کلاس XpsDocument ایجاد کنید.
  • یک نمونه از کلاس JpegSaveOptions ایجاد کنید.
  • گزینه هایی مانند SmoothingMode و Resolution را مشخص کنید.
  • یک نمونه از کلاس ImageDevice ایجاد کنید.
  • با استفاده از [XpsDocument->Save(System::SharedPtr، سند XPS/OXPS را در ImageDevice ذخیره کنید. دستگاه، سیستم::SharedPtr گزینه ها)]15 روش.
  • از طریق پارتیشن های سند تکرار کنید.
  • جریان خروجی را راه اندازی کنید و تصاویر JPG را ذخیره کنید.

کد نمونه زیر نحوه تبدیل اسناد XPS/OXPS به فرمت JPG با استفاده از C++ را نشان می دهد.

// فایل ورودی
System::String inputFileName = u"SourceDirectory\\sample.xps";
//فایل خروجی 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// جریان ورودی XPS را راه اندازی کنید
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// پاک کردن منابع تحت عبارت «استفاده»
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// -----------------------------------------

	try
	{
		// سند XPS را از جریان بارگیری کنید
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// یا سند XPS را مستقیماً از فایل بارگیری کنید. در این صورت نیازی به xpsStream نیست.
		// سند XpsDocument = XpsDocument جدید (inputFileName, new XpsLoadOptions());

		// شیء JpegSaveOptions را با پارامترهای لازم راه اندازی کنید.
		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; 
		}();

		// ایجاد دستگاه رندر برای فرمت JPG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// تکرار از طریق پارتیشن های سند (اسناد ثابت، در شرایط 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++)
			{
				// جریان خروجی تصویر را راه اندازی کنید
				{
					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);
					// پاک کردن منابع تحت عبارت «استفاده»
					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 تولید شده توسط کد نمونه

تصویر JPG تولید شده توسط کد نمونه

اسناد XPS/OXPS را به فرمت PNG تبدیل کنید

در زیر مراحل تبدیل اسناد XPS و OXPS به فرمت PNG آورده شده است.

  • یک جریان را با فایل منبع XPS/OXPS راه اندازی کنید.
  • با استفاده از جریان XPS/OXPS یک نمونه از کلاس XpsDocument ایجاد کنید.
  • یک نمونه از کلاس PngSaveOptions ایجاد کنید.
  • گزینه هایی مانند SmoothingMode و Resolution را مشخص کنید.
  • یک نمونه از کلاس ImageDevice ایجاد کنید.
  • با استفاده از [XpsDocument->Save(System::SharedPtr، سند XPS/OXPS را در ImageDevice ذخیره کنید. دستگاه، سیستم::SharedPtr گزینه ها)]22 روش.
  • از طریق پارتیشن های سند تکرار کنید.
  • جریان خروجی را راه اندازی کنید و تصاویر PNG را ذخیره کنید.

کد نمونه زیر نحوه تبدیل اسناد XPS/OXPS به فرمت PNG با استفاده از C++ را نشان می دهد.

// فایل ورودی
System::String inputFileName = u"SourceDirectory\\sample.xps";
//فایل خروجی 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// جریان ورودی XPS را راه اندازی کنید
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// پاک کردن منابع تحت عبارت «استفاده»
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// -----------------------------------------

	try
	{
		// سند XPS را از جریان بارگیری کنید
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// یا سند XPS را مستقیماً از فایل بارگیری کنید. در این صورت نیازی به xpsStream نیست.
		// سند XpsDocument = XpsDocument جدید (inputFileName, new XpsLoadOptions());

		// شیء PngSaveOptions را با پارامترهای لازم مقداردهی کنید.
		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; 
		}();

		// ایجاد دستگاه رندر برای فرمت PNG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// تکرار از طریق پارتیشن های سند (اسناد ثابت، در شرایط 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++)
			{
				// جریان خروجی تصویر را راه اندازی کنید
				{
					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);
					// پاک کردن منابع تحت عبارت «استفاده»
					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 تولید شده توسط کد نمونه

تصویر PNG تولید شده توسط کد نمونه

مجوز رایگان دریافت کنید

با درخواست [مجوز موقت رایگان] می‌توانید API را بدون محدودیت ارزیابی امتحان کنید.

نتیجه

در این مقاله با نحوه تبدیل اسناد XPS و OXPS به فرمت های تصویری JPG و PNG با استفاده از ++C آشنا شده اید. علاوه بر این، Aspose.Page برای C++ API فرمت های مختلف دیگری را برای استفاده شما فراهم می کند. می‌توانید با مراجعه به اسناد رسمی API را با جزئیات بررسی کنید. در صورت وجود هرگونه سوال، لطفاً با ما در تالار گفتمان پشتیبانی رایگان تماس بگیرید.

همچنین ببینید