סקירת תכונות — Aspose.Note FOSS עבור Python
Aspose.Note FOSS for Python (package aspose-note, גרסה 26.3.1) מספקת API Python לקריאת Microsoft OneNote .one קבצי מקטע ומייצאת אותם ל‑PDF. כל התכונות המפורטות למטה אומתו מול קוד המקור של המאגר, קובץ README, וסקריפטים לדוגמה.
התקנה והגדרה
התקנה מ‑PyPI:
pip install aspose-noteלתמיכה בייצוא ל‑PDF (דורש ReportLab):
pip install "aspose-note[pdf]"דרישות: Python 3.10 או גרסה מאוחרת יותר. אין צורך בהתקנת Microsoft Office.
תכונות ויכולות
.טעינת קובץ .one
טען קבצי מקטע של Microsoft OneNote מנתיב קובץ או מכל זרם בינארי (מזהה קובץ, io.BytesIO, גוף תגובת HTTP, זרם אחסון ענן).
Document.FileFormatמספקת אינדיקציה במאמץ מיטבי לגרסת פורמט הקובץ של OneNote (OneNote2010, OneNoteOnline, או OneNote2007)- טעינה מבוססת זרם מבטלת קלט/פלט לדיסק עבור זרימות עבודה בזיכרון או ברשת
LoadOptions.LoadHistoryדגל שולט האם היסטוריית העמודים נכללת ב‑DOM
from aspose.note import Document
##From a file path
doc = Document("notebook.one")
##From a binary stream
with open("notebook.one", "rb") as f:
doc = Document(f)ניווט ב‑DOM של המסמך
המסמך המלא של OneNote נחשף כעץ של אובייקטים Python מסוגים. כל צומת יורשת מ‑ Node או CompositeNode:
Document: שורש; חושפתDisplayName,CreationTime,FileFormatPage: צאצא ישיר שלDocument; חושפתTitle,Author,CreationTime,LastModifiedTime,LevelTitle: חושפתTitleText,TitleDate,TitleTime(כלRichTextצמתים)Outline: מכולה מיקומית עםHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: מכולת עלה; חושפתNumberList
שיטות ניווט על CompositeNode:
| מתודה / מאפיין | תיאור |
|---|---|
FirstChild, LastChild | גישה ישירה לילד |
GetChildNodes(Type) | חיפוש רקורסיבי, מסונן לפי סוג |
AppendChildLast(node) | הוסף צאצא בסוף |
AppendChildFirst(node) | הוסף צאצא בתחילה |
InsertChild(index, node) | הכנס במיקום |
RemoveChild(node) | הסר צאצא |
for child in node | עבור על צאצאים ישירים |
from aspose.note import Document, Page, Outline, OutlineElement, RichText
doc = Document("notebook.one")
for page in doc.GetChildNodes(Page):
title_text = page.Title.TitleText.Text if page.Title and page.Title.TitleText else ""
print(f"Page: {title_text}")
for outline in page.GetChildNodes(Outline):
for oe in outline.GetChildNodes(OutlineElement):
for rt in oe.GetChildNodes(RichText):
print(f" {rt.Text}")חילוץ תוכן טקסט עשיר
RichText הצמתים מציגים:
Text: str: מחרוזת טקסט פשוט מלאהTextRuns: list[TextRun]: רשימת קטעים מעוצביםTags: list[NoteTag]: תגיות OneNote המצורפות לחלק זהAppend(text, style=None): הוספת רצף טקסט בזיכרוןReplace(old_value, new_value): החלפת מחרוזת בזיכרון
כל TextRun מכיל:
| תכונה | סוג | תיאור |
|---|---|---|
Text | str | טקסט קטע |
Style | TextStyle | מטא-נתוני עיצוב |
TextStyle מאפיינים:
| מאפיין | סוג |
|---|---|
IsBold, IsItalic, IsUnderline, IsStrikethrough | bool |
IsSuperscript, IsSubscript | bool |
FontName | `str |
FontSize | `float |
FontColor, Highlight | `int |
Language | `int |
IsHyperlink | bool |
HyperlinkAddress | `str |
from aspose.note import Document, RichText
doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.TextRuns:
if run.Style.IsHyperlink:
print(f"Hyperlink: {run.Text} -> {run.Style.HyperlinkAddress}")
if run.Style.IsBold:
print(f"Bold text: {run.Text}")חילוץ תמונות
Image הצמתים מציגים בתים גולמיים ונתוני מטא עבור כל תמונה משובצת:
| מאפיין | סוג | תיאור |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | נתוני תמונה גולמיים |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[NoteTag] | תגיות OneNote מצורפות |
from aspose.note import Document, Image
doc = Document("notebook.one")
for i, img in enumerate(doc.GetChildNodes(Image), start=1):
filename = img.FileName or f"image_{i}.bin"
with open(filename, "wb") as f:
f.write(img.Bytes)
print(f"Saved: {filename} ({img.Width} x {img.Height} pts)")חילוץ קובץ מצורף
AttachedFile הצמתים מציגים קבצים משובצים:
| מאפיין | סוג | תיאור |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | נתוני קובץ גולמי |
Tags | list[NoteTag] | תגיות OneNote מצורפות |
from aspose.note import Document, AttachedFile
doc = Document("notebook.one")
for i, af in enumerate(doc.GetChildNodes(AttachedFile), start=1):
filename = af.FileName or f"attachment_{i}.bin"
with open(filename, "wb") as f:
f.write(af.Bytes)פענוח טבלאות
Table, TableRow, ו TableCell חשוף את מבנה הטבלה המלא:
| מחלקה | מאפיינים מפתח |
|---|---|
Table | Columns: list[TableColumn] (כל TableColumn יש .Width ו .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | חזור על תאים באמצעות GetChildNodes(TableCell) |
TableCell | מכיל RichText, Image, ואלמנטים תוכן אחרים |
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("notebook.one")
for table in doc.GetChildNodes(Table):
print("Column widths:", [col.Width for col in table.Columns])
for r, row in enumerate(table.GetChildNodes(TableRow), start=1):
cells = row.GetChildNodes(TableCell)
values = [
" ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
for cell in cells
]
print(f"Row {r}:", values)בדיקת תגיות OneNote
NoteTag מופיע ב RichText, Image, AttachedFile, ו Table צמתים דרך ה .Tags מאפיין. OutlineElement אין לו .Tags מאפיין. NoteTag מאפיינים:
| מאפיין | סוג | תיאור |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
מתודת מפעל: NoteTag.CreateYellowStar() יוצרת צומת תג כוכב צהוב סטנדרטי.
from aspose.note import Document, RichText
doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
for tag in rt.Tags:
print(f"Tag: {tag.Label} (icon={tag.Icon}, completed={tag.CompletedTime})")תמיכה ברשימות ממוספרות
OutlineElement.NumberList מחשפת:
| מאפיין | סוג | תיאור |
|---|---|---|
Format | `str | None` |
Restart | `int | None` |
from aspose.note import Document, OutlineElement
doc = Document("notebook.one")
for oe in doc.GetChildNodes(OutlineElement):
nl = oe.NumberList
if nl:
print(f"format={nl.Format!r}")מעבר עם DocumentVisitor
DocumentVisitor מספקת תבנית מבקר לניווט מובנה של המסמך המלא. ניתן לעקוף כל VisitXxxStart / VisitXxxEnd מתודה כדי לתפוס סוגי צמתים ספציפיים:
VisitDocumentStart(doc)/VisitDocumentEnd(doc)VisitPageStart(page)/VisitPageEnd(page)VisitTitleStart(title)/VisitTitleEnd(title)VisitOutlineStart(outline)/VisitOutlineEnd(outline)VisitOutlineElementStart(oe)/VisitOutlineElementEnd(oe)VisitRichTextStart(rt)/VisitRichTextEnd(rt)VisitImageStart(img)/VisitImageEnd(img)
from aspose.note import Document, DocumentVisitor, Page, RichText, Image
class MySummaryVisitor(DocumentVisitor):
def __init__(self):
self.pages, self.texts, self.images = 0, 0, 0
def VisitPageStart(self, page: Page) -> None:
self.pages += 1
def VisitRichTextStart(self, rt: RichText) -> None:
self.texts += 1
def VisitImageStart(self, img: Image) -> None:
self.images += 1
doc = Document("notebook.one")
v = MySummaryVisitor()
doc.Accept(v)
print(f"Pages={v.pages} RichText={v.texts} Images={v.images}")ייצוא PDF
שמור מסמך טעון ל-PDF באמצעות Document.Save(). נתמך דרך המנוע האופציונלי ReportLab.
from aspose.note import Document, SaveFormat
doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)PdfSaveOptions
| אפשרות | סוג | תיאור |
|---|---|---|
PageIndex | int | השדה קיים; לא נשלח למייצא PDF ב‑v26.3.1 (אין לו השפעה) |
PageCount | `int | None` |
ImageCompression | `Any | None` |
JpegQuality | `int | None` |
PageSettings | `Any | None` |
PageSplittingAlgorithm | `Any | None` |
import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions
doc = Document("notebook.one")
##Save to file
doc.Save("output.pdf", SaveFormat.Pdf)
##Save to in-memory stream
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()התייחסות לפורמט ול‑Enum
SaveFormat
| ערך | סטטוס |
|---|---|
SaveFormat.Pdf | מיושם (דורש ReportLab) |
FileFormat
Document.FileFormat מספק אינדיקציה במאמץ מיטבי לגרסת פורמט הקובץ של OneNote. האינום מגדיר שלושה ערכים:
| ערך | תיאור |
|---|---|
FileFormat.OneNote2010 | פורמט OneNote 2010 |
FileFormat.OneNoteOnline | פורמט OneNote Online |
FileFormat.OneNote2007 | פורמט OneNote 2007 |
NodeType
NodeType.Document, NodeType.Page, NodeType.Outline, NodeType.OutlineElement, NodeType.RichText, NodeType.Image, NodeType.Table, NodeType.AttachedFile
HorizontalAlignment
HorizontalAlignment.Left, HorizontalAlignment.Center, HorizontalAlignment.Right
מגבלות נוכחיות
| הגבלה | פרט |
|---|---|
| קריאה בלבד | כתיבה חזרה ל .one הפורמט אינו מיושם |
| אין הצפנה | מסמכים מוצפנים גורמים ל IncorrectPasswordException |
| PDF רק לייצוא | אחר SaveFormat ערכים גורמים ל UnsupportedSaveFormatException |
| נדרש ReportLab ל‑PDF | התקנה pip install "aspose-note[pdf]" בנפרד |
GetPageHistory מחזיר רשימה בעלת אלמנט יחיד | מעבר מלא בהיסטוריית העמוד הוא תחליף; מחזיר [page] |
DetectLayoutChanges() | תחליף תאימות; ללא פעולה |
טיפים ושיטות עבודה מומלצות
- בדוק עבור None:
Page.Title,Title.TitleText,OutlineElement.NumberList, ורוב שדות המטא‑נתונים יכולים להיותNone. תמיד הגן עםif x is not Noneאוif xלפני גישה למאפיינים. - השתמש
GetChildNodes(Type)לחיפוש רקורסיבי במקום לאיטרציה ידנית של העץ. הוא מחפש את כל תת‑העץ. - איטרציה על ילדים ישירים עם
for child in nodeכאשר אתה צריך רק ילדים מיידיים. - טפל בקידוד ב-Windows: ב-Windows,
sys.stdoutייתכן שישתמש בדף קוד מיושן. הוסףsys.stdout.reconfigure(encoding="utf-8", errors="replace")בהפעלה כאשר מדפיס טקסט Unicode. - התקן
[pdf]נוסף: אל תייבאSaveFormat.Pdfפונקציונליות לפני התקנה ראשונית שלpip install "aspose-note[pdf]". ללא ReportLab, שמירת קובץ PDF תגרום לשגיאת ייבוא בזמן ריצה.