עבודה עם מסמך הערה

מדריך זה מסביר כיצד להעלות, לעבור ולייצוא את Microsoft OneNote .one קבצים ב-Python באמצעות Document מועדון תגיות: הערה FOSS, The Document המעמד הוא שורש מודל האובייקט של המסמך (DOM), וכל קריאה, מעבר או ייצוא מתחיל עם Document המצב שבו נוצר יחיד .one קובץ סעיף .


להעלות מסמך

טעינה ממסלול קובץ

עבר את הדרך אל א .one הקובץ ישירות אל Document מבנה :

from aspose.note import Document

doc = Document("MyNotes.one")

טעינה מזרם בינארי

השתמש באובייקט דומה לקובץ כאשר הנתונים מגיעים מתגובה רשת, בלוב אחסון ענן או בופר זיכרון:

from pathlib import Path
from aspose.note import Document

with Path("MyNotes.one").open("rb") as f:
    doc = Document(f)

יצירת מסמך ריק

בניית A Document אין שום סיבה לבנות מסמך OneNote חדש בתכנית:

from aspose.note import Document, Page

doc = Document()
doc.AppendChildLast(Page())

מחוברים עם אפשרויות

שימוש LoadOptions כדי להגדיר פרמטרים אופציונליים כגון היסטוריה של טעינה בזמן הבנייה:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # include page revision history in the DOM
doc = Document("MyNotes.one", opts)
LoadOptions נכסיםסוגדוגמניתתיאור
LoadHistoryboolFalseכאשר True, העדכונים היסטוריים של הדף נכללים ב- DOM וניתן להשיג דרך Document.GetPageHistory
DocumentPassword`strNone`None

תיעוד בפורמט זיהוי

The FileFormat תכונה מזהה איזה סוג של OneNote משתמש בקובץ:

from aspose.note import Document, FileFormat

doc = Document("MyNotes.one")

if doc.FileFormat == FileFormat.OneNote2010:
    print("OneNote 2010 format")
elif doc.FileFormat == FileFormat.OneNoteOnline:
    print("OneNote Online format")
elif doc.FileFormat == FileFormat.OneNote2007:
    print("OneNote 2007 format")
else:
    print("Format:", doc.FileFormat)
FileFormat ערךתיאור
OneNote2010סטנדרטים .one קובץ שנכתב על ידי OneNote 2010 ומאוחר יותר
OneNoteOnline.one קובץ שנכתב על ידי OneNote Online / Microsoft 365
OneNote2007מורשת .one פורמט OneNote 2007
Unknownלא ניתן לזהות את הפורמט.

איטרציה על דפים

הדפים הם הילדים הישירים של Document.השתמש A for תגיות קשורות איטרה פשוטה:

from aspose.note import Document

doc = Document("MyNotes.one")

for page in doc:
    title_text = (
        page.Title.TitleText.Text
        if page.Title and page.Title.TitleText
        else "(untitled)"
    )
    author = page.Author or "(unknown)"
    level = page.Level or 1
    indent = "  " * (level - 1)
    print(f"{indent}{title_text}  [by {author}]")

שימוש GetChildNodes(Page) כדי לקבל רשימה של כל הדפים בבת אחת:

from aspose.note import Document, Page

doc = Document("MyNotes.one")
pages = doc.GetChildNodes(Page)
print(f"Total pages: {len(pages)}")

דף Metadata

נכסיםסוגתיאור
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`
IsConflictPageboolTrue אם הדף הוא עותק של סכסוך סינכרון

מעבר לעץ המסמך

Document מורשת מן CompositeNode, לתת לו את כל העץ דרך שיטות:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")

# Extract all plain text from the entire document
all_text = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print("\n".join(all_text))

הירושלמיות של DOM:

Document
  └── Page (0..n)
        ├── Title
        │     ├── TitleText (RichText)
        │     ├── TitleDate (RichText)
        │     └── TitleTime (RichText)
        └── Outline (0..n)
              └── OutlineElement (0..n)
                    ├── RichText
                    ├── Image
                    ├── Table
                    │     └── TableRow → TableCell → RichText / Image
                    └── AttachedFile

שיטות קרוז מרכזיות מורשת מן CompositeNode:

שיטתתיאור
GetChildNodes(NodeType)החזיר רשימה של כל הנכדים המתאימים לסוג מסוים
AppendChildLast(node)הוסף נוט ילדים בסוף רשימת הילדים
AppendChildFirst(node)הוסף נוט תינוק בהתחלה
InsertChild(index, node)להוסיף ילד לאינדקס מסוים
RemoveChild(node)להסיר נוט ילד
GetEnumerator()תנו לילדים ישירים

דף היסטוריה

כאשר הוא משאיר עם LoadHistory=True, Document.GetPageHistory החזיר את כל השינויים שנשמרו מתוך דף, הורה מן העתיק עד האחרון:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True
doc = Document("MyNotes.one")

for page in doc.GetChildNodes(None.__class__.__mro__[0]):  # iterate pages
    pass

# Get revisions for a specific page
import aspose.note as an

doc2 = Document("MyNotes.one", opts)
pages = doc2.GetChildNodes(an.Page)
if pages:
    history = doc2.GetPageHistory(pages[0])
    print(f"Revision count: {history.Count}")
    for rev in history:
        print(f"  Modified: {rev.LastModifiedTime}")

הערה: GetPageHistory חוזרים ריקים PageHistory אובייקט כאשר LoadHistory הוא False (התכנית תמיד תצטרך) opts.LoadHistory = True לפני ההעלאה אם יש צורך נתוני ביקורת.


חיסכון וייצוא

שימוש Document.Save PDF הוא פורמט היחיד המוצע.

שמור לתיעוד

שיחת טלפון Document.Save() עם מסלול קובץ ו SaveFormat.Pdf כדי לכתוב את היצוא ישירות לדיסק:

from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)

הציל לתוך זרם זיכרון

עבר כתיבה io.BytesIO בופר במקום מסלול כדי לתפוס את ה- PDF באטים בזיכרון:

import io
from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, SaveFormat.Pdf)
pdf_bytes = buf.getvalue()

הצלחה עם אפשרויות

שימוש PdfSaveOptions מתוך aspose.note.saving כדי לבדוק אילו דפים נכללים בתוצאת PDF המייצרת:

import io
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions

doc = Document("MyNotes.one")

# Export pages 2 and 3 only (zero-based index)
opts = PdfSaveOptions(PageIndex=1, PageCount=2)
buf = io.BytesIO()
doc.Save(buf, opts)
pdf_bytes = buf.getvalue()

חשוב: ייצוא PDF דורש את תלות ReportLab האופציונלית. התקנת אותו עם pip install "aspose-note[pdf]".


• זיהוי שינויים בהרצאה

שיחת טלפון DetectLayoutChanges לאחר שינוי המסמך כדי לחשב מחדש את מטריית ההרצאה לפני ההצלה:

from aspose.note import Document, Page

doc = Document()
page = Page()
doc.AppendChildLast(page)

# ... add content to page ...

doc.DetectLayoutChanges()
doc.Save("output.pdf")

טיפים ושיטות טובות

  • תנו פעם אחת, שאלו פעמים רבות.: Document משלם את כל .one קובץ הזיכרון ב תגית: שמור אחד Document מקרה וקול GetChildNodes לעתים קרובות יותר מאשר להעלות מחדש את הקובץ עבור כל שאלה.
  • צפו IsConflictPage: OneNote sync יכול לייצר דפי סכסוך. [p for p in doc if not p.IsConflictPage] לפני עיבוד התוכן.
  • שימוש LoadHistory=False (בדיוק) עבור מהירות: היסטוריה של הדף מוסיף זיכרון משמעותי ו תגית: רק סדנה LoadHistory=True כאשר אתה זקוק באופן מפורש לנתונים המוחזקים.
  • זרם עבור קבצים גדולים: העברת אובייקט קובץ פתוח במקום רצועת דרך בעת קריאה גדול .one כדי למנוע את הפתיחה של הקובץ לאחר השלמת המפרק.
  • שיחת טלפון DetectLayoutChanges לפני Save:• כאשר מתבצעת תוכנה של מסמך ובהתלהבות של קוטרים, צלצול DetectLayoutChanges() כדי להבטיח את הקואורדינטות של עקבי לפני ייצוא ל- PDF.

בעיות נפוצות

נושאסיבהקבע
IncorrectPasswordException על הלחץקובץ מוצפן; מסמכים מוצפנים אינם נתמךקבל עותק לא מוצפן של הקובץ
FileCorruptedException על הלחץקובץ הוא מעוות או יש פורמט פנימי לא נתמךבדוק אם הקובץ הוא תקין. .one סעיף (לא א) .onetoc2 טבלת התוכן (Contents)
UnsupportedSaveFormatException על הצלתניסיתי לשמור בפורמט אחר מאשר PDFרק פורמט PDF תומך ב-Export.
ריק GetPageHistory תוצאהLoadOptions.LoadHistory לא הוגשה ל True לפני ההעלאהלהעלות מחדש את המסמך עם opts.LoadHistory = True
ModuleNotFoundError: reportlabPDF Export ניסה ללא ה-PDF Extraריצה pip install "aspose-note[pdf]"

FAQ

אילו פורמטים OneNote יכול לקרוא Aspose.Notes?

כל שלושת פורמטים של סעיף OneNote: OneNote2007, OneNote2010, ו OneNoteOnline. שימוש doc.FileFormat כדי לזהות איזה סוג של שונה הושקע.

אפשר לכתוב בחזרה ל-A .one קובץ אחרי הקריאה?

Aspose.Note for Python is a read-and-export library. Use Document.Save פורמט OneNote בינארי הוא קריאה בלבד בפורמט FOSS זה.

איך אני קורא דף מסוים לפי כותרת?

לחתוך את הדפים עם ביטוי גנרטור ולהשוות את תכונת הטקסט הכותרת לשורת היעד שלך:

from aspose.note import Document

doc = Document("MyNotes.one")
target = next(
    (p for p in doc
     if p.Title and p.Title.TitleText and p.Title.TitleText.Text == "My Page"),
    None,
)

כיצד אני מחשב את הדפים התחתונים בנפרד מהדפים ברמה הגבוהה ביותר?

שימוש page.Level:רמה 1 היא ברמה העליונה, רמת 2 היא תת-דף וכך.

from aspose.note import Document

doc = Document("MyNotes.one")
top_level = [p for p in doc if (p.Level or 1) == 1]
sub_pages  = [p for p in doc if (p.Level or 1) > 1]
print(f"Top-level: {len(top_level)}, Sub-pages: {len(sub_pages)}")

תמיכה ב-Note Support .onetoc2 קובץ טבלה של תוכן?

לא רק .one תמיכה בקטגוריות קבצים. .onetoc2 המחשבים יגדלו FileCorruptedException.


סיכום התייחסות API

שיעור / שיטהתיאור
Document(path_or_stream, options?)להורדה A .one הקובץ או יצירת מסמך ריק
Document.FileFormatתבנית הסטטוסים (FileFormat אנדרו)
Document.GetChildNodes(NodeType)לחזור לכל הקווים הנמוכים של סוג מסוים
Document.GetPageHistory(page)קבל היסטוריה של ביקורת עבור דף (דרישות) LoadHistory=True)
Document.Save(target, format_or_options)ייצוא ל- PDF לפי מסלול קובץ או זרם
Document.DetectLayoutChanges()מחשוב מחדש של מטריית הפריסה לאחר עריכה תכנותית
Document.Accept(visitor)עקבו אחרי DOM DOM A DocumentVisitor תת-קטגוריה
LoadOptions.LoadHistoryסדיר ל True להוסיף סקרים בדף ב- DOM
LoadOptions.DocumentPasswordתגיות: קבצים מקפידים IncorrectPasswordException
FileFormatאנאום : OneNote2010, OneNoteOnline, OneNote2007, Unknown
SaveFormat.Pdfהפורמט היחיד לתמיכה של ייצוא; גדל ValueError עבור פורמטים אחרים
PageHistory.Countמספר העמודים שניתן לבצע
Page.Levelעמוקת דף תת-קרקעי (1 = רמה העליונה)
Page.IsConflictPageTrue עבור סינכרון קונפליקטים עותקים

ראה גם

 עברית