حدد خيارات التحميل
عند تحميل مستند، يمكنك تعيين بعض الخصائص المتقدمة. Aspose.Words يوفر لك فئة LoadOptions، والتي تتيح تحكما أكثر دقة في عملية التحميل. تحتوي بعض تنسيقات التحميل على فئة مقابلة تحتوي على خيارات التحميل لتنسيق التحميل هذا، على سبيل المثال، يوجد PdfLoadOptions للتحميل إلى PDF تنسيق أو TxtLoadOptions للتحميل إلى TXT. تقدم هذه المقالة أمثلة للعمل مع خيارات فئة LoadOptions.
تعيين Microsoft Word نسخة لتغيير المظهر
يمكن للإصدارات المختلفة من تطبيق Microsoft Word عرض المستندات بشكل غير مبال. على سبيل المثال، هناك مشكلة معروفة مع OOXML وثائق مثل DOCX أو DOTX أنتجت باستخدام WPS مكتب. في مثل هذه الحالة، قد تكون عناصر ترميز المستند الأساسية مفقودة أو قد يتم تفسيرها بشكل مختلف مما يتسبب في Microsoft Word 2019 لإظهار مثل هذا المستند بشكل مختلف مقارنة بـ Microsoft Word 2010.
افتراضيا Aspose.Words يفتح المستندات باستخدام Microsoft Word 2019 قواعد. إذا كنت بحاجة إلى جعل تحميل المستند يظهر كما سيحدث في أحد إصدارات التطبيق Microsoft Word السابقة، فيجب عليك تحديد الإصدار المطلوب صراحة باستخدام خاصية MswVersion لفئة LoadOptions.
يوضح مثال التعليمات البرمجية التالية كيفية تعيين الإصدار Microsoft Word مع خيارات التحميل:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>(); | |
// Change the loading version to Microsoft Word 2010. | |
loadOptions->set_MswVersion(MsWordVersion::Word2010); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Document.docx", loadOptions); | |
System::String outputPath = outputDataDir + u"Load_Options.SetMSWordVersion.docx"; | |
doc->Save(outputPath); |
تعيين تفضيلات اللغة لتغيير المظهر
لا تعتمد تفاصيل عرض مستند في Microsoft Word على إصدار التطبيق وقيمة الخاصية MswVersion فحسب، بل تعتمد أيضا على إعدادات اللغة. Microsoft Word قد تظهر المستندات بشكل مختلف اعتمادا على إعدادات مربع الحوار" تفضيلات لغة المكتب “، والتي يمكن العثور عليها في"ملف Options خيارات Language لغة”. باستخدام مربع الحوار هذا، يمكن للمستخدم تحديد، على سبيل المثال، اللغة الأساسية ولغات التدقيق ولغات العرض وما إلى ذلك. Aspose.Words يوفر خاصية LanguagePreferences كمكافئ لمربع الحوار هذا. إذا كان الإخراج Aspose.Words يختلف عن الإخراج Microsoft Word، فقم بتعيين القيمة المناسبة لـ EditingLanguage - يمكن أن يؤدي ذلك إلى تحسين مستند الإخراج.
يوضح مثال الكود التالي كيفية تعيين اليابانية على أنها EditingLanguage:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// Create a new LoadOptions object. | |
System::SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>(); | |
// Set language preferences that will be used when document is loading. | |
loadOptions->get_LanguagePreferences()->AddEditingLanguage(EditingLanguage::Japanese); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"languagepreferences.docx", loadOptions); |
استخدم WarningCallback للتحكم في المشكلات أثناء تحميل مستند
قد تكون بعض المستندات تالفة أو تحتوي على إدخالات غير صالحة أو تحتوي على ميزات غير مدعومة حاليا بواسطة Aspose.Words. إذا كنت تريد معرفة المشكلات التي حدثت أثناء تحميل مستند، Aspose.Words يوفر IWarningCallback واجهة.
يوضح مثال التعليمات البرمجية التالية تنفيذ واجهة IWarningCallback:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
class DocumentLoadingWarningCallback : public IWarningCallback | |
{ | |
public: | |
System::SharedPtr<WarningInfoCollection> mWarnings; | |
void Warning(System::SharedPtr<WarningInfo> info) override; | |
DocumentLoadingWarningCallback(); | |
}; | |
void DocumentLoadingWarningCallback::Warning(System::SharedPtr<WarningInfo> info) | |
{ | |
// Prints warnings and their details as they arise during document loading. | |
std::cout << "WARNING: {info->get_WarningType} " << std::endl; | |
std::cout << "Source: {info->get_Source} " << std::endl; | |
std::cout << "\tDescription: {info->get_Description} " << std::endl; | |
} | |
DocumentLoadingWarningCallback::DocumentLoadingWarningCallback() : mWarnings(System::MakeObject<WarningInfoCollection>()) | |
{ | |
} |
للحصول على معلومات حول جميع المشاكل طوال وقت التحميل، استخدم خاصية WarningCallback
.
يوضح مثال التعليمات البرمجية التالية كيفية استخدام هذه الخاصية:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// Create a new LoadOptions object and set its WarningCallback property. | |
System::SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>(); | |
System::SharedPtr<DocumentLoadingWarningCallback> callback = System::MakeObject<DocumentLoadingWarningCallback>(); | |
loadOptions->set_WarningCallback(callback); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Document.docx", loadOptions); |
استخدم ResourceLoadingCallback للتحكم في تحميل الموارد الخارجية
قد يحتوي المستند على روابط خارجية لصور موجودة في مكان ما على قرص محلي أو شبكة أو إنترنت. Aspose.Words يقوم تلقائيا بتحميل هذه الصور في مستند، ولكن هناك حالات تحتاج فيها هذه العملية إلى التحكم. على سبيل المثال، لتحديد ما إذا كنا نحتاج حقا إلى تحميل صورة معينة أو ربما تخطيها. يسمح لك خيار التحميل ResourceLoadingCallback بالتحكم في ذلك.
يوضح مثال التعليمات البرمجية التالية تنفيذ واجهة IResourceLoadingCallback:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
class HtmlLinkedResourceLoadingCallback : public IResourceLoadingCallback | |
{ | |
public: | |
ResourceLoadingAction ResourceLoading(System::SharedPtr<ResourceLoadingArgs> args) override; | |
HtmlLinkedResourceLoadingCallback(); | |
}; | |
HtmlLinkedResourceLoadingCallback::HtmlLinkedResourceLoadingCallback() | |
{ | |
} | |
ResourceLoadingAction HtmlLinkedResourceLoadingCallback::ResourceLoading(System::SharedPtr<ResourceLoadingArgs> args) | |
{ | |
switch (args->get_ResourceType()) | |
{ | |
case ResourceType::CssStyleSheet: | |
{ | |
std::cout << "External CSS Stylesheet found upon loading: " << args->get_OriginalUri().ToUtf8String() << std::endl; | |
// CSS file will don't used in the document | |
return ResourceLoadingAction::Skip; | |
} | |
case ResourceType::Image: | |
{ | |
// Replaces all images with a substitute | |
System::String newImageFilename = u"Logo.jpg"; | |
std::cout << "\tImage will be substituted with: " << newImageFilename.ToUtf8String() << std::endl; | |
System::SharedPtr<System::Drawing::Image> newImage = System::Drawing::Image::FromFile(GetInputDataDir_LoadingAndSaving() + newImageFilename); | |
System::SharedPtr<System::Drawing::ImageConverter> converter = System::MakeObject<System::Drawing::ImageConverter>(); | |
auto imageBytes = System::DynamicCast<System::Array<uint8_t>>(converter->ConvertTo(nullptr, nullptr, newImage, System::ObjectExt::GetType<System::Array<uint8_t>>())); | |
//System::ArrayPtr<uint8_t> imageBytes = System::IO::File::ReadAllBytes(GetInputDataDir_LoadingAndSaving() + newImageFilename); | |
args->SetData(imageBytes); | |
// New images will be used instead of presented in the document | |
return ResourceLoadingAction::UserProvided; | |
} | |
case ResourceType::Document: | |
{ | |
std::cout << "External document found upon loading: " << args->get_OriginalUri().ToUtf8String() << std::endl; | |
// Will be used as usual | |
return ResourceLoadingAction::Default; | |
} | |
default: | |
throw System::InvalidOperationException(u"Unexpected ResourceType value."); | |
} | |
} | |
يوضح مثال التعليمات البرمجية التالية كيفية استخدام الخاصية ResourceLoadingCallback:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// Create a new LoadOptions object and set its ResourceLoadingCallback attribute as an instance of our IResourceLoadingCallback implementation | |
System::SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>(); | |
loadOptions->set_ResourceLoadingCallback(System::MakeObject<HtmlLinkedResourceLoadingCallback>()); | |
// When we open an Html document, external resources such as references to CSS stylesheet files and external images | |
// will be handled in a custom manner by the loading callback as the document is loaded | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Images.html", loadOptions); | |
doc->Save(outputDataDir + u"Load_Options.LoadOptionsResourceLoadingCallback.pdf"); |
استخدم TempFolder لتجنب استثناء الذاكرة
Aspose.Words يدعم المستندات الكبيرة للغاية التي تحتوي على آلاف الصفحات المليئة بالمحتوى الغني. قد يتطلب تحميل هذه المستندات الكثير RAM. في عملية التحميل، Aspose.Words يحتاج المزيد من الذاكرة لعقد الهياكل المؤقتة المستخدمة لتحليل وثيقة.
إذا كانت لديك مشكلة في استثناء نفاد الذاكرة أثناء تحميل مستند، فحاول استخدام الخاصية TempFolder. في هذه الحالة، سيقوم Aspose.Words بتخزين بعض البيانات في ملفات مؤقتة بدلا من الذاكرة، وهذا يمكن أن يساعد في تجنب مثل هذا الاستثناء.
يوضح مثال الكود التالي كيفية تعيين TempFolder:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>(); | |
loadOptions->set_TempFolder(u"C:/TempFolder/"); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Document.docx", loadOptions); |
تعيين الترميز صراحة
تخزن معظم تنسيقات المستندات الحديثة محتواها في يونيكود ولا تتطلب معالجة خاصة. من ناحية أخرى، لا يزال هناك العديد من المستندات التي تستخدم بعض ترميز ما قبل يونيكود وأحيانا إما تفوت معلومات الترميز أو لا تدعم حتى معلومات الترميز بطبيعتها. Aspose.Words يحاول اكتشاف الترميز المناسب تلقائيا بشكل افتراضي، ولكن في حالة نادرة قد تحتاج إلى استخدام ترميز مختلف عن الترميز الذي تم اكتشافه بواسطة خوارزمية التعرف على الترميز الخاصة بنا. في هذه الحالة، استخدم الخاصية Encoding للحصول على الترميز أو تعيينه.
يوضح مثال التعليمات البرمجية التالية كيفية تعيين الترميز لتجاوز الترميز الذي تم اختياره تلقائيا:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// Set the Encoding attribute in a LoadOptions object to override the automatically chosen encoding with the one we know to be correct | |
System::SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>(); | |
loadOptions->set_Encoding(System::Text::Encoding::get_UTF7()); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Encoded in UTF-7.txt", loadOptions); |
تحميل المستندات المشفرة
يمكنك تحميل مستندات كلمة مشفرة بكلمة مرور. للقيام بذلك، استخدم الزائد منشئ خاص، الذي يقبل كائن LoadOptions. يحتوي هذا الكائن على خاصية Password، والتي تحدد سلسلة كلمة المرور.
يوضح مثال الكود التالي كيفية تحميل مستند مشفر بكلمة مرور:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// The path to the documents directory. | |
System::String dataDir = GetInputDataDir_LoadingAndSaving(); | |
// Loads encrypted document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(dataDir + u"LoadEncrypted.docx", System::MakeObject<LoadOptions>(u"aspose")); | |
إذا كنت لا تعرف مسبقا ما إذا كان الملف مشفرا، فيمكنك استخدام فئة FileFormatUtil، والتي توفر طرقا مفيدة للعمل مع تنسيقات الملفات، مثل اكتشاف تنسيق الملف أو تحويل امتدادات الملفات إلى/من تعدادات تنسيق الملف. لاكتشاف ما إذا كان المستند مشفرا ويتطلب كلمة مرور لفتحه، استخدم خاصية IsEncrypted
.
يوضح مثال الكود التالي كيفية التحقق من OpenDocument إما أنه مشفر أم لا:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<FileFormatInfo> info = FileFormatUtil::DetectFileFormat(inputDataDir + u"encrypted.odt"); | |
std::cout << info->get_IsEncrypted() << std::endl; |