סקירת תכונות — 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, FileFormat
  • Page: צאצא ישיר של Document; חושפת Title, Author, CreationTime, LastModifiedTime, Level
  • Title: חושפת TitleText, TitleDate, TitleTime (כל RichText צמתים)
  • Outline: מכולה מיקומית עם HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: מכולת עלה; חושפת 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 מכיל:

תכונהסוגתיאור
Textstrטקסט קטע
StyleTextStyleמטא-נתוני עיצוב

TextStyle מאפיינים:

מאפייןסוג
IsBold, IsItalic, IsUnderline, IsStrikethroughbool
IsSuperscript, IsSubscriptbool
FontName`str
FontSize`float
FontColor, Highlight`int
Language`int
IsHyperlinkbool
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`strNone`
Bytesbytesנתוני תמונה גולמיים
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[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`strNone`
Bytesbytesנתוני קובץ גולמי
Tagslist[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 חשוף את מבנה הטבלה המלא:

מחלקהמאפיינים מפתח
TableColumns: 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`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

מתודת מפעל: 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`strNone`
Restart`intNone`
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

אפשרותסוגתיאור
PageIndexintהשדה קיים; לא נשלח למייצא PDF ב‑v26.3.1 (אין לו השפעה)
PageCount`intNone`
ImageCompression`AnyNone`
JpegQuality`intNone`
PageSettings`AnyNone`
PageSplittingAlgorithm`AnyNone`
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 תגרום לשגיאת ייבוא בזמן ריצה.
 עברית