עבודה עם מסמך הערה
מדריך זה מסביר כיצד להעלות, לעבור ולייצוא את 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 נכסים | סוג | דוגמנית | תיאור |
|---|---|---|---|
LoadHistory | bool | False | כאשר True, העדכונים היסטוריים של הדף נכללים ב- DOM וניתן להשיג דרך Document.GetPageHistory |
DocumentPassword | `str | None` | 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 | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
IsConflictPage | bool | True אם הדף הוא עותק של סכסוך סינכרון |
מעבר לעץ המסמך
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: reportlab | PDF 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.IsConflictPage | True עבור סינכרון קונפליקטים עותקים |
ראה גם
- טקסט אקשן: להוציא טקסט שטוח ופורמט רצים
- PDF ייצוא: אפשרויות ייצוא, בחירת דף, ו- Stream output
- תמונות ותיקים: להוציא תמונות מוטבעות וקבצים מקושרים
- שולחנות:• מבנה שולחן הפריסה ותוכן התא
- תגית: API Document
- Aspose.Note — Enterprise Documentation