Określ opcje ładowania
Podczas ładowania dokumentu możesz ustawić pewne zaawansowane właściwości. Aspose.Words udostępnia klasę LoadOptions, która pozwala na bardziej precyzyjną kontrolę procesu ładowania. Niektóre formaty ładowania mają odpowiednią klasę, która przechowuje opcje ładowania dla tego formatu ładowania, na przykład istnieje PdfLoadOptions do ładowania do formatu PDF lub TxtLoadOptions do ładowania do TXT. W tym artykule przedstawiono przykłady pracy z opcjami klasy LoadOptions.
Ustaw wersję Microsoft Word, aby zmienić wygląd
Różne wersje aplikacji Microsoft Word mogą wyświetlać dokumenty w różny sposób. Na przykład istnieje dobrze znany problem z dokumentami OOXML, takimi jak DOCX lub DOTX, tworzonymi przy użyciu pakietu WPS Office. W takim przypadku może brakować istotnych elementów znaczników dokumentu lub mogą one być różnie interpretowane, co powoduje, że Microsoft Word 2019 wyświetla taki dokument inaczej niż Microsoft Word 2010.
Domyślnie Aspose.Words otwiera dokumenty przy użyciu reguł Microsoft Word 2019. Jeśli chcesz, aby ładowanie dokumentu wyglądało tak, jak miałoby to miejsce w jednej z poprzednich wersji aplikacji Microsoft Word, powinieneś jawnie określić żądaną wersję, korzystając z właściwości MswVersion klasy LoadOptions.
Poniższy przykład kodu pokazuje, jak ustawić wersję Microsoft Word z opcjami ładowania:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// Create a new LoadOptions object, which will load documents according to MS Word 2019 specification by default | |
// and change the loading version to Microsoft Word 2010. | |
LoadOptions loadOptions = new LoadOptions { MswVersion = MsWordVersion.Word2010 }; | |
Document doc = new Document(MyDir + "Document.docx", loadOptions); | |
doc.Save(ArtifactsDir + "WorkingWithLoadOptions.SetMsWordVersion.docx"); |
Ustaw preferencje językowe, aby zmienić wygląd
Szczegóły wyświetlania dokumentu w Microsoft Word zależą nie tylko od wersji aplikacji i wartości właściwości MswVersion, ale także od ustawień języka. Microsoft Word może wyświetlać dokumenty w różny sposób, w zależności od ustawień okna dialogowego “Preferencje językowe pakietu Office”, które można znaleźć w “Plik → Opcje → Język”. Za pomocą tego okna dialogowego użytkownik może wybrać na przykład język podstawowy, języki sprawdzające, języki wyświetlania i tak dalej. Aspose.Words udostępnia właściwość LanguagePreferences jako odpowiednik tego okna dialogowego. Jeśli wynik Aspose.Words różni się od wyniku Microsoft Word, ustaw odpowiednią wartość dla EditingLanguage – może to poprawić dokument wyjściowy.
Poniższy przykład kodu pokazuje, jak ustawić język japoński jako EditingLanguage:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
LoadOptions loadOptions = new LoadOptions(); | |
// Set language preferences that will be used when document is loading. | |
loadOptions.LanguagePreferences.AddEditingLanguage(EditingLanguage.Japanese); | |
Document doc = new Document(MyDir + "No default editing language.docx", loadOptions); | |
int localeIdFarEast = doc.Styles.DefaultFont.LocaleIdFarEast; | |
Console.WriteLine( | |
localeIdFarEast == (int)EditingLanguage.Japanese | |
? "The document either has no any FarEast language set in defaults or it was set to Japanese originally." | |
: "The document default FarEast language was set to another than Japanese language originally, so it is not overridden."); |
Użyj WarningCallback, aby kontrolować problemy podczas ładowania dokumentu
Niektóre dokumenty mogą być uszkodzone, zawierać nieprawidłowe wpisy lub zawierać funkcje nieobsługiwane obecnie przez Aspose.Words. Jeśli chcesz wiedzieć o problemach, które wystąpiły podczas ładowania dokumentu, Aspose.Words udostępnia interfejs IWarningCallback.
Poniższy przykładowy kod ilustruje implementację interfejsu IWarningCallback:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
public class DocumentLoadingWarningCallback : IWarningCallback | |
{ | |
public void Warning(WarningInfo info) | |
{ | |
// Prints warnings and their details as they arise during document loading. | |
Console.WriteLine($"WARNING: {info.WarningType}, source: {info.Source}"); | |
Console.WriteLine($"\tDescription: {info.Description}"); | |
} | |
} |
Aby uzyskać informacje o wszystkich problemach przez cały czas ładowania, użyj właściwości WarningCallback.
Poniższy przykład kodu pokazuje, jak używać tej właściwości:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
LoadOptions loadOptions = new LoadOptions { WarningCallback = new DocumentLoadingWarningCallback() }; | |
Document doc = new Document(MyDir + "Document.docx", loadOptions); |
Użyj ResourceLoadingCallback, aby kontrolować ładowanie zasobów zewnętrznych
Dokument może zawierać zewnętrzne łącza do obrazów znajdujących się gdzieś na dysku lokalnym, w sieci lub w Internecie. Aspose.Words automatycznie ładuje takie obrazy do dokumentu, jednak zdarzają się sytuacje, gdy proces ten wymaga kontroli. Na przykład, aby zdecydować, czy naprawdę musimy załadować dany obraz, czy może go pominąć. Opcja ładowania ResourceLoadingCallback pozwala to kontrolować.
Poniższy przykładowy kod ilustruje implementację interfejsu IResourceLoadingCallback:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
private class HtmlLinkedResourceLoadingCallback : IResourceLoadingCallback | |
{ | |
public ResourceLoadingAction ResourceLoading(ResourceLoadingArgs args) | |
{ | |
switch (args.ResourceType) | |
{ | |
case ResourceType.CssStyleSheet: | |
{ | |
Console.WriteLine($"External CSS Stylesheet found upon loading: {args.OriginalUri}"); | |
// CSS file will don't used in the document. | |
return ResourceLoadingAction.Skip; | |
} | |
case ResourceType.Image: | |
{ | |
// Replaces all images with a substitute. | |
Image newImage = Image.FromFile(ImagesDir + "Logo.jpg"); | |
ImageConverter converter = new ImageConverter(); | |
byte[] imageBytes = (byte[])converter.ConvertTo(newImage, typeof(byte[])); | |
args.SetData(imageBytes); | |
// New images will be used instead of presented in the document. | |
return ResourceLoadingAction.UserProvided; | |
} | |
case ResourceType.Document: | |
{ | |
Console.WriteLine($"External document found upon loading: {args.OriginalUri}"); | |
// Will be used as usual. | |
return ResourceLoadingAction.Default; | |
} | |
default: | |
throw new InvalidOperationException("Unexpected ResourceType value."); | |
} | |
} | |
} |
Poniższy przykład kodu pokazuje, jak używać właściwości ResourceLoadingCallback:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
LoadOptions loadOptions = new LoadOptions { ResourceLoadingCallback = new HtmlLinkedResourceLoadingCallback() }; | |
// When we open an Html document, external resources such as references to CSS stylesheet files | |
// and external images will be handled customarily by the loading callback as the document is loaded. | |
Document doc = new Document(MyDir + "Images.html", loadOptions); | |
doc.Save(ArtifactsDir + "WorkingWithLoadOptions.ResourceLoadingCallback.pdf"); |
Użyj TempFolder, aby uniknąć wyjątku pamięci
Aspose.Words obsługuje niezwykle duże dokumenty zawierające tysiące stron pełnych bogatej treści. Załadowanie takich dokumentów może wymagać dużej ilości pamięci RAM. W procesie ładowania Aspose.Words potrzebuje jeszcze więcej pamięci do przechowywania tymczasowych struktur używanych do analizowania dokumentu.
Jeśli podczas ładowania dokumentu pojawia się wyjątek Out of Memory, spróbuj użyć właściwości TempFolder. W takim przypadku Aspose.Words będzie przechowywać niektóre dane w plikach tymczasowych zamiast w pamięci, co może pomóc uniknąć takiego wyjątku.
Poniższy przykład kodu pokazuje, jak ustawić TempFolder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
LoadOptions loadOptions = new LoadOptions { TempFolder = ArtifactsDir }; | |
Document doc = new Document(MyDir + "Document.docx", loadOptions); |
Ustaw kodowanie jawnie
Większość nowoczesnych formatów dokumentów przechowuje swoją zawartość w formacie Unicode i nie wymaga specjalnej obsługi. Z drugiej strony, nadal istnieje wiele dokumentów, w których zastosowano kodowanie wcześniejsze niż Unicode i czasami albo brakuje w nich informacji o kodowaniu, albo nawet z natury nie obsługują one informacji o kodowaniu. Aspose.Words domyślnie próbuje automatycznie wykryć odpowiednie kodowanie, ale w rzadkich przypadkach może zaistnieć potrzeba użycia kodowania innego niż wykrywane przez nasz algorytm rozpoznawania kodowania. W takim przypadku użyj właściwości Encoding, aby uzyskać lub ustawić kodowanie.
Poniższy przykład kodu pokazuje, jak ustawić kodowanie, aby zastąpić automatycznie wybrane kodowanie:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
LoadOptions loadOptions = new LoadOptions { Encoding = Encoding.UTF7 }; | |
Document doc = new Document(MyDir + "Encoded in UTF-7.txt", loadOptions); |
Załaduj zaszyfrowane dokumenty
Możesz ładować dokumenty programu Word zaszyfrowane hasłem. Aby to zrobić, użyj specjalnego przeciążenia konstruktora, który akceptuje obiekt LoadOptions. Obiekt ten zawiera właściwość Password, która określa ciąg hasła.
Poniższy przykład kodu pokazuje, jak załadować dokument zaszyfrowany hasłem:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(MyDir + "Encrypted.docx", new LoadOptions("docPassword")); |
Jeśli nie wiesz z góry, czy plik jest zaszyfrowany, możesz skorzystać z klasy FileFormatUtil, która udostępnia metody narzędziowe do pracy z formatami plików, takie jak wykrywanie formatu pliku lub konwertowanie rozszerzeń plików do/z wyliczeń formatu pliku. Aby wykryć, czy dokument jest zaszyfrowany i do jego otwarcia wymagane jest hasło, użyj właściwości IsEncrypted.
Poniższy przykład kodu pokazuje, jak sprawdzić, czy OpenDocument jest zaszyfrowany, czy nie:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
FileFormatInfo info = FileFormatUtil.DetectFileFormat(MyDir + "Encrypted.odt"); | |
Console.WriteLine(info.IsEncrypted); |