Jak załadować dokumenty Word w .NET
Jak ładować dokumenty Word w .NET
Aspose.Words FOSS for .NET wczytuje dokument do pamięci, gdy tylko skonstruujesz Document obiekt — każda ścieżka ładowania w bibliotece przechodzi przez Document’s przeciążenia konstruktora i LoadOptions klasę. Ten przewodnik pokazuje, jak wczytać dokument z pliku lub strumienia, podać hasło lub ustawienia specyficzne dla formatu oraz kontrolować, co się dzieje, gdy ładowanie napotyka zewnętrzny zasób lub dokument, który może być niepoprawny. Aspose.Words FOSS for .NET jest budowany ze źródeł i odwoływany bezpośrednio w projekcie, zamiast instalować go z repozytorium pakietów — zobacz Przewodnik instalacji dotyczący kroków budowania przed przystąpieniem do zadań poniżej.
Przewodnik krok po kroku
Krok 1: Wczytaj dokument z pliku lub strumienia
Document ma pięć konstruktorów. Document() tworzy nowy, pusty dokument, zamiast go wczytywać. Document(fileName) wczytuje bezpośrednio z ścieżki na dysku, a Document(stream) wczytuje z dowolnego czytelnego Stream — przydatne, gdy źródło nie jest plikiem, np. treść już w pamięci lub otrzymana przez połączenie sieciowe. Oba mają towarzyszące przeciążenie, które przyjmuje drugi argument, Document(fileName, loadOptions) i Document(stream, loadOptions), będący punktem wejścia dla wszystkich pozostałych zadań w tym przewodniku.
Krok 2: Wczytaj dokument chroniony hasłem
Utwórz LoadOptions z hasłem przed wywołaniem Document(fileName, loadOptions) (lub przeciążeniem strumienia). new LoadOptions(password) ustawia LoadOptions.Password bezpośrednio; alternatywnie, ustaw Password na bezparametrowym obiekcie LoadOptions() przed jego przekazaniem. Dostarcz hasło od razu, zamiast najpierw ładować i reagować na błąd — Aspose.Words FOSS dla .NET potrzebuje hasła, aby w ogóle przetworzyć chroniony plik, więc nie ma częściowo załadowanego stanu, z którego można by się odzyskać.
Krok 3: Zastosuj opcje specyficzne dla formatu dla źródeł tekstowych i Markdown
Źródła w formacie zwykłego tekstu i Markdown akceptują ustawienia, których podstawowy LoadOptions nie udostępnia. TxtLoadOptions dodaje AutoNumberingDetection i DetectNumberingWithWhitespaces do rozpoznawania numerowanych list w zwykłym tekście, DetectHyperlinks do zamiany surowych adresów URL w hiperłącza, DocumentDirection (LeftToRight, RightToLeft lub Auto) dla kierunku przepływu tekstu oraz oddzielne LeadingSpacesOptions/TrailingSpacesOptions (typu TxtLeadingSpacesOptions/TxtTrailingSpacesOptions) do obsługi białych znaków na początku i końcu każdej linii. MarkdownLoadOptions dodaje PreserveEmptyLines, ImportUnderlineFormatting i SoftLineBreakCharacter w celu kontrolowania, jak konwencje łamania linii w Markdown mapują się na akapity i ciągi. Obie podklasy dziedziczą po LoadOptions, więc hasło lub wywołanie zwrotne ładowania zasobów ustawione na którejkolwiek z nich zachowuje się tak samo jak w klasie bazowej — przekaż instancję specyficzną dla formatu do Document(fileName, loadOptions) dokładnie tak, jak przekazałbyś zwykły LoadOptions.
Krok 4: Przekieruj lub przechwyć zewnętrzne zasoby podczas ładowania
Ustaw LoadOptions.ResourceLoadingCallback na implementację IResourceLoadingCallback, gdy potrzebujesz kontrolować sposób, w jaki zewnętrzny zasób odwoływany w dokumencie jest rozwiązywany podczas ładowania. Jego metoda ResourceLoading(args) otrzymuje ResourceLoadingArgs opisujący ResourceType zasobu (Image, Font, CssStyleSheet lub Document) wraz z Uri i OriginalUri, i zwraca ResourceLoadingAction — Default, aby załadować zasób normalnie, Skip, aby go pominąć, lub UserProvided, aby podstawić dane dostarczone przez ResourceLoadingArgs.SetData(data).
Krok 5: Ustaw domyślne języki i zachowanie przy odzyskiwaniu
Gdy metadane językowe dokumentu są brakujące lub niepewne, ustaw LoadOptions.LanguagePreferences.DefaultEditingLanguage na wartość EditingLanguage przed ładowaniem i użyj AddEditingLanguage(language) lub AddEditingLanguages(languages) na LanguagePreferences, aby zarejestrować dodatkowe języki, które dokument może zawierać. Dla źródeł, które mogą być niepoprawne, ustaw LoadOptions.RecoveryMode na wartość DocumentRecoveryMode — None, aby ładować bez żadnej próby odzyskiwania, lub TryRecover, aby loader radził sobie z niektórymi problemami strukturalnymi zamiast całkowicie niepowodzenia ładowania.
Typowe problemy i rozwiązania
Ładowanie dokumentu chronionego hasłem nadal zgłasza wyjątek po podaniu hasła. Potwierdź, że hasło zostało ustawione na dokładnym LoadOptions instancja przekazana do Document(fileName, loadOptions) (lub przeciążenie strumienia) — przez new LoadOptions(password) lub poprzez ustawienie Password później — i że jest to obiekt faktycznie przekazany do konstruktora. A LoadOptions który został utworzony, ale nigdy nie przekazany do Document nie ma wpływu na ładowanie.
Ustawienia specyficzne dla tekstu lub Markdown nie wydają się mieć zastosowania. Sprawdź, że a TxtLoadOptions or MarkdownLoadOptions instancja — nie bazowa LoadOptions — został przekazany do Document konstruktor. Tylko podklasa udostępnia właściwości specyficzne dla formatu; przekazanie klasy bazowej kompiluje się, ale cicho pomija je.
Zewnętrzne zasoby nie są przechwytywane ani przekierowywane. ResourceLoadingCallback musi być ustawiony na tym samym LoadOptions obiekcie przekazanym do Document konstruktorze, i musi być przypisany przed wywołaniem load. Przypisanie go po zakończeniu ładowania nie ma żadnego efektu.
Nieprawidłowy dokument nadal nie udaje się załadować po ustawieniu RecoveryMode. DocumentRecoveryMode.TryRecover pozwala ładowarce obejść niektóre problemy strukturalne w dokumencie, ale poważniejsze uszkodzenia nadal mogą uniemożliwić pomyślne załadowanie dokumentu.
Dokument załadowany z Stream zachowuje się inaczej niż ten sam plik załadowany przez ścieżkę. Sprawdź, czy pozycja strumienia znajduje się na początku, zanim przekażesz go do Document(stream) or Document(stream, loadOptions) — strumień pozostawiony w połowie zawartości ładuje tylko pozostałe bajty.
Najczęściej zadawane pytania
Jak załadować dokument bez żadnych specjalnych opcji?
Przekaż ścieżkę do pliku lub Stream bezpośrednio do Document(fileName) lub Document(stream) — LoadOptions jest wymagane tylko wtedy, gdy potrzebne jest hasło, ustawienia specyficzne dla formatu lub wywołanie zwrotne.
Jaka jest różnica między LoadOptions, TxtLoadOptions i MarkdownLoadOptions?
TxtLoadOptions i MarkdownLoadOptions dziedziczą po LoadOptions i dodają ustawienia specyficzne odpowiednio dla źródeł tekstu prostego i Markdown. Każda ogólna własność LoadOptions — hasło, kodowanie, wywołania zwrotne — pozostaje dostępna w obu podklasach.
Czy mogę wczytać dokument bezpośrednio z tablicy bajtów?
Umieść bajty w MemoryStream i przekaż ten strumień do Document(stream) lub Document(stream, loadOptions) — nie ma konstruktora przyjmującego tablicę bajtów bezpośrednio.
Jak mogę kontrolować, co się stanie, gdy loader nie może rozwiązać zewnętrznego zasobu?
Zaimplementuj IResourceLoadingCallback i przypisz go do LoadOptions.ResourceLoadingCallback. Zwróć ResourceLoadingAction.Skip z ResourceLoading(args), aby pominąć zasób zamiast pozwolić na niepowodzenie ładowania.
Czy ustawienie RecoveryMode zmienia sposób, w jaki ładowany jest poprawnie sformułowany dokument?
Nr DocumentRecoveryMode zmienia zachowanie tylko wtedy, gdy loader rzeczywiście napotyka problemy strukturalne — poprawnie sformułowany dokument ładuje się tak samo, niezależnie od ustawienia.