Посочете Опциите За Зареждане

Когато зареждате документ, можете да зададете някои разширени свойства. 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 може да показва документи по различен начин в зависимост от настройките на диалоговия прозорец “Предпочитания за език на офиса”, които могат да бъдат намерени в “Опции за файл → → език”. С помощта на този диалогов прозорец потребителят може да избере например основен език, езици за проверка, езици за показване и т.н. 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);

Зареждане На Криптирани Документи

Можете да заредите Word документи, криптирани с парола. За да направите това, използвайте специално претоварване на конструктора, което приема обект 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;