מסמכי XPS ו-OXPS דומים לקבצי PDF ומגדירים את הפריסה, המראה ומידע ההדפסה של מסמך. ייתכן שיש תרחישים שבהם תצטרך להמיר מסמכי XPS ו-OXPS לפורמטים של תמונה JPG ו-PNG. לשם כך, מאמר זה ילמד אותך כיצד להמיר מסמכי XPS ו-OXPS לפורמט תמונה JPG ו-PNG באמצעות C++.
- C++ API להמרת קבצי XPS, OXPS לפורמט JPG או PNG
- המר מסמכי XPS/OXPS לפורמט JPG
- המר מסמכי XPS/OXPS לפורמט PNG
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());
}
}
המר מסמכי 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());
}
}
קבל רישיון חינם
אתה יכול לנסות את ה-API ללא מגבלות הערכה על ידי בקשת [רישיון זמני בחינם].23
סיכום
במאמר זה, למדת כיצד להמיר מסמכי XPS ו-OXPS לפורמטים של תמונות JPG ו-PNG באמצעות C++. יתר על כן, Aspose.Page for C++ API מספק פורמטים נוספים לשימושך. אתה יכול לחקור את ה-API בפירוט על ידי ביקור בתיעוד הרשמי. בכל שאלה, אנא אל תהסס לפנות אלינו ב[פורום התמיכה החינמי] שלנו25.