איך לעבוד עם מסמכים ב-.NET
מדריך זה מציג כיצד לעבוד עם מודל האובייקטים Document ב Aspose.Words FOSS עבור .NET: יצירת מסמך ריק, טעינת מסמך קיים בצורה בטוחה, ניווט במבנה הסעיפים/גוף, שילוב מסמכים, והחלת הגבלה על עריכה. Aspose.Words FOSS עבור .NET זמין דרך NuGet או על-ידי בנייה מהמקור.
מדריך שלב-אחר-שלב
שלב 1: קבל את הספרייה
שכפל את המאגר ובנה Aspose.Words.sln בתצורת Release, ואז הוסף הפנייה לפרויקט ל Aspose.Words.csproj מתוך הפרויקט .NET שלך. פקודות השכפול והבנייה המלאות נמצאות ב מדריך ההתקנה. לאחר שהופנה, הוסף using Aspose.Words; בראש כל קובץ שעובד עם מסמכים.
שלב 2: צור או טען מסמך
קרא ל-new Document() לקבלת מסמך ריק, או העבר נתיב קובץ או Stream לבנאי Document(fileName) / Document(stream) כדי לפתוח קיים. גרסה עודפת שמקבלת ארגומנט LoadOptions מאפשרת לספק סיסמה לקובץ מוצפן. לפני טעינת קובץ שהפורמט שלו אינך סומך עליו עדיין, קרא ל-FileFormatUtil.DetectFileFormat(fileName) — הוא מחזיר FileFormatInfo המדווח על ה-LoadFormat שנמצא והאם הקובץ IsEncrypted, HasDigitalSignature או HasMacros, כך שתוכל לדחות קלט בלתי צפוי לפני ש-Document מנסה לנתח אותו.
שלב 3: מחבר תוכן עם DocumentBuilder
DocumentBuilder מקיף Document עם cursor שאתה מזיז דרך העץ תוך הכנסת תוכן. Write(text) ו-Writeln(text) מכניסים טקסט ב-cursor, ו-InsertParagraph() מתחיל פסקה חדשה. העיצוב המוגדר במאפייני Font, ParagraphFormat, ListFormat ו-PageSetup של הבונה חל על מה שאתה כותב לאחר מכן. העבר את ה-cursor עם MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) או MoveToParagraph(paragraphIndex, characterIndex), וקרא CurrentNode / CurrentParagraph / CurrentSection כדי לאשר היכן הבונה ממוקם.
שלב 4: לבדוק את מבנה הקטע והגוף
Document חושף SectionCollection דרך Document.Sections (בנוסף ל-FirstSection / LastSection). לכל Section יש בדיוק Body אחד, שהתוכן הראשי שלו נגיש דרך Body.Paragraphs (זהו ParagraphCollection) ו-Body.Tables. כדי לקרוא או לחפש טקסט מבלי לעבור ידנית על צמתים, השתמש ב-Range הזמין ב-Document, Section, Paragraph ובצמתים אחרים — Range.Text מחזיר את הטקסט הגולמי שלו, ו-Range.Replace(pattern, replacement) מבצע חיפוש והחלפה המוגבל רק לטווח הזה.
שלב 5: לשלב שני מסמכים
כדי להעתיק מסמך שלם, קרא Document.Clone(). כדי להביא תוכן ספציפי ממופע Document אחד לאחר, קרא ImportNode(srcNode, isImportChildren) על מסמך היעד, או קרא Document.AppendDocument(srcDoc, importFormatMode) כדי לצרף כל קטע של מסמך מקור לסוף של המסמך הנוכחי. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) עושה את אותו דבר אך מכניס במיקום ה-cursor של הבונה במקום בסוף. בכל שלושת המקרים, בחר את ערך ה-ImportFormatMode — KeepSourceFormatting, UseDestinationStyles או KeepDifferentStyles — במכוון, מכיוון שהוא מחליט אילו סגנונות של המסמך ינצחו כאשר השניים מתנגשים.
שלב 6: להחיל הגבלת עריכה
קרא Document.Protect(type, password) עם ערך ProtectionType — ReadOnly, AllowOnlyComments, AllowOnlyRevisions או AllowOnlyFormFields — כדי להגביל אילו עריכות Word מקבל עבור המסמך. Unprotect() (עם או בלי הסיסמה המתאימה) מסיר את ההגבלה. זה משפיע רק על עריכה בתוך Word; הוא אינו מצפין את הקובץ השמור. כדי לדרוש סיסמה רק לפתיחת הקובץ, הגדר OoxmlSaveOptions.Password בעת השמירה.
בעיות נפוצות ותיקונים
Document(fileName) מחזיר שגיאה עבור קובץ שנפתח כראוי ב-Word. הפורמט של הקובץ אינו נתמך על-ידי הטעינים של גרסה זו. Call FileFormatUtil.DetectFileFormat(fileName) קודם ובדוק את המוחזר LoadFormat לפני ניסיון הטעינה.
תוכן שהועתק בין מסמכים מקבל את הגופנים או הסגנונות הלא נכונים. ה ImportFormatMode הועבר ל AppendDocument or InsertDocument אינו תואם למה שציפית. העבר KeepSourceFormatting or UseDestinationStyles במפורש במקום להסתמך על ברירת מחדל.
Unprotect() נראה שאין לו השפעה. או שהמסמך לא הוגן בסיסמה (קרא Unprotect() ללא ארגומנטים), או שהסיסמה שסופקה אינה תואמת את Protect() שנעשה בו הקריאה.
עיצוב שהוחל דרך DocumentBuilder אינו מופיע במקומו הצפוי. עיצוב ברמת Builder (Font, ParagraphFormat) חלה רק על תוכן שנכתב after כאשר הוא מוגדר. הזז את הסמן והגדר עיצוב לפני הקריאה Write/Writeln, לא אחרי.
שאלות נפוצות
איך ליצור מסמך Word חדש וריק?
קרא new Document(). עטוף אותו ב-DocumentBuilder כדי להתחיל להכניס תוכן מיד.
מה ההבדל בין Document.Clone() ל-ImportNode?
Clone() מעתיק מסמך שלם למופע חדש של Document. ImportNode(srcNode, isImportChildren) מביא צומת יחיד — ובאופן רשות גם את הילדים שלו — מעץ של מסמך אחד לאחר, וזה מה שאתה משתמש בו כדי לשלב תוכן ספציפי במקום מסמכים שלמים.
איך אני בודק בבטחה את פורמט הקובץ לפני טעינתו?
קרא FileFormatUtil.DetectFileFormat(fileName) (או את העומס המוגזם של Stream) ובדוק את המאפיינים LoadFormat, IsEncrypted, HasDigitalSignature ו-HasMacros של ה-FileFormatInfo שהוחזר לפני שמעבירים את הקובץ ל-Document.
איך אני קורא רק את הפסקאות בתוך גוף המסמך?
השתמש באוסף Body.Paragraphs על Body של הקטע, או ב-Body.GetChildNodes(nodeType, isDeep) לסוגי צמתים אחרים.
האם Document.Protect מצפין את הקובץ השמור?
לא — זו הגבלה עריכה ש-Word מטילה כאשר הקובץ נפתח. כדי לדרוש סיסמה לפתיחת הקובץ עצמו, הגדר OoxmlSaveOptions.Password כאשר קוראים לDocument.Save.