המר XPS, OXPS לתמונת JPG או PNG באמצעות C++

מסמכי XPS ו-OXPS דומים לקבצי PDF ומגדירים את הפריסה, המראה ומידע ההדפסה של מסמך. ייתכן שיש תרחישים שבהם תצטרך להמיר מסמכי XPS ו-OXPS לפורמטים של תמונה JPG ו-PNG. לשם כך, מאמר זה ילמד אותך כיצד להמיר מסמכי XPS ו-OXPS לפורמט תמונה JPG ו-PNG באמצעות C++.

C++ API להמרת קבצי XPS, OXPS לפורמט JPG או PNG

Aspose.Page for 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.
  • צור מופע של המחלקה XpsDocument באמצעות זרם XPS/OXPS.
  • צור מופע של המחלקה JpegSaveOptions.
  • ציין אפשרויות כמו SmoothingMode ו-Resolution.
  • צור מופע של המחלקה ImageDevice.
  • שמור את מסמך XPS/OXPS ב-ImageDevice באמצעות [XpsDocument->Save(System::SharedPtr) מכשיר, System::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 document = new 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.
  • צור מופע של המחלקה XpsDocument באמצעות זרם XPS/OXPS.
  • צור מופע של המחלקה PngSaveOptions.
  • ציין אפשרויות כמו SmoothingMode ו-Resolution.
  • צור מופע של המחלקה ImageDevice.
  • שמור את מסמך XPS/OXPS ב-ImageDevice באמצעות [XpsDocument->Save(System::SharedPtr) מכשיר, System::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 document = new 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 ללא מגבלות הערכה על ידי בקשת [רישיון זמני בחינם].23

סיכום

במאמר זה, למדת כיצד להמיר מסמכי XPS ו-OXPS לפורמטים של תמונות JPG ו-PNG באמצעות C++. יתר על כן, Aspose.Page for C++ API מספק פורמטים נוספים לשימושך. אתה יכול לחקור את ה-API בפירוט על ידי ביקור בתיעוד הרשמי. בכל שאלה, אנא אל תהסס לפנות אלינו ב[פורום התמיכה החינמי] שלנו25.

ראה גם