Prezentare generală a funcționalităților — Aspose.Note FOSS pentru Python

Aspose.Note FOSS for Python (package aspose-note, versiunea 26.3.1) oferă o API Python pentru citirea Microsoft OneNote .one fișiere de secțiune și exportarea lor în PDF. Toate funcționalitățile enumerate mai jos sunt verificate în raport cu codul sursă al depozitului, README și scripturile de exemplu.

Instalare și configurare

Instalați de pe PyPI:

pip install aspose-note

Pentru suportul exportului PDF (necesită ReportLab):

pip install "aspose-note[pdf]"

Cerințe: Python 3.10 sau o versiune ulterioară. Nu este necesară instalarea Microsoft Office.


Funcționalități și capabilități

.Încărcarea fișierelor .one

Încarcă fișierele de secțiune Microsoft OneNote dintr-o cale de fișier sau orice flux binar (descriere de fișier, io.BytesIO, corpul răspunsului HTTP, flux de stocare în cloud).

  • Document.FileFormat furnizează o indicație de tip best‑effort a versiunii formatului de fișier OneNote (OneNote2010, OneNoteOnline sau OneNote2007)
  • Încărcarea bazată pe flux elimină operațiile de I/O pe disc pentru fluxuri de lucru în memorie sau de rețea
  • LoadOptions.LoadHistory indicatorul controlează dacă istoricul paginii este inclus în 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)

Parcurgerea DOM-ului documentului

Documentul complet OneNote este expus ca un arbore de obiecte Python tipizate. Fiecare nod moștenește de la Node sau CompositeNode:

  • Document: rădăcină; expune DisplayName, CreationTime, FileFormat
  • Page: copil direct al Document; expune Title, Author, CreationTime, LastModifiedTime, Level
  • Title: expune TitleText, TitleDate, TitleTime (toate RichText noduri)
  • Outline: container pozițional cu HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: container frunză; expune NumberList

Metode de navigare pe CompositeNode:

Metodă / ProprietateDescriere
FirstChild, LastChildAcces direct la copil
GetChildNodes(Type)Căutare recursivă, filtrată pe tip
AppendChildLast(node)Adaugă copil la sfârșit
AppendChildFirst(node)Adaugă un copil la început
InsertChild(index, node)Inserează la poziție
RemoveChild(node)Elimină un copil
for child in nodeIterează copiii direcți
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}")

Extracție de conținut Rich Text

RichText nodurile expun:

  • Text: str: șir complet de text simplu
  • TextRuns: list[TextRun]: listă de segmente formatate
  • Tags: list[NoteTag]: etichete OneNote atașate acestui bloc
  • Append(text, style=None): adaugă o secvență de text în memorie
  • Replace(old_value, new_value): substituție de șir în memorie

Fiecare TextRun conține:

ProprietateTipDescriere
TextstrText segment
StyleTextStyleMetadate de formatare

TextStyle proprietăți:

ProprietateTip
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}")

Extracție de imagini

Image nodurile expun octeți brute și metadate pentru fiecare imagine încorporată:

ProprietateTipDescriere
FileName`strNone`
BytesbytesDate brute ale imaginii
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Etichete OneNote atașate
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)")

Extracție de fișiere atașate

AttachedFile nodurile expun atașamente de fișiere încorporate:

ProprietateTipDescriere
FileName`strNone`
BytesbytesDate brute ale fișierului
Tagslist[NoteTag]Etichete OneNote atașate
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)

Analiză de tabel

Table, TableRow, și TableCell expune structura completă a tabelului:

ClasăProprietăți cheie
TableColumns: list[TableColumn] (fiecare TableColumn are .Width și .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowIterați celulele prin GetChildNodes(TableCell)
TableCellConține RichText, Image, și alte noduri de conținut
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)

Inspecție etichete OneNote

NoteTag apare pe RichText, Image, AttachedFile, și Table noduri prin intermediul lor .Tags proprietate. OutlineElement nu are un .Tags proprietate. NoteTag proprietăți:

ProprietateTipDescriere
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Metodă de fabricare: NoteTag.CreateYellowStar() creează un nod de etichetă cu stea galbenă standard.

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})")

Suport pentru liste numerotate

OutlineElement.NumberList expune:

ProprietateTipDescriere
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}")

Parcurgere DocumentVisitor

DocumentVisitor furnizează un model de vizitator pentru parcurgerea structurată a documentului complet. Suprascrie orice VisitXxxStart / VisitXxxEnd metodă pentru a intercepta tipuri specifice de noduri:

  • 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}")

Export PDF

Salvează un document încărcat în PDF utilizând Document.Save(). Suportat prin backend-ul opțional ReportLab.

from aspose.note import Document, SaveFormat

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

PdfSaveOptions

OpțiuneTipDescriere
PageIndexintCâmpul există; nu este transmis exportatorului PDF în v26.3.1 (nu are efect)
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()

Referință pentru Formate și Enumerații

SaveFormat

ValoareStare
SaveFormat.PdfImplementat (necesită ReportLab)

FileFormat

Document.FileFormat furnizează o indicație de bună credință a versiunii formatului de fișier OneNote. Enumerația declară trei valori:

ValoareDescriere
FileFormat.OneNote2010Format OneNote 2010
FileFormat.OneNoteOnlineFormat OneNote Online
FileFormat.OneNote2007Format 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


Limitări curente

LimitareDetaliu
Doar citireSe scrie înapoi la .one formatul nu este implementat
Fără criptareDocumentele criptate generează IncorrectPasswordException
PDF doar pentru exportAltele SaveFormat Valorile generează UnsupportedSaveFormatException
ReportLab necesar pentru PDFInstalare pip install "aspose-note[pdf]" separat
GetPageHistory returnează o listă cu un singur elementParcurgerea completă a istoricului paginii este un stub; returnează [page]
DetectLayoutChanges()Stub de compatibilitate; nicio operație

Sfaturi și bune practici

  • Verifică dacă este None: Page.Title, Title.TitleText, OutlineElement.NumberList, iar majoritatea câmpurilor de metadate pot fi None. Întotdeauna protejează cu if x is not None sau if x înainte de a accesa proprietățile.
  • Folosește GetChildNodes(Type) pentru căutare recursivă în loc să iterezi manual arborele. Caută întregul subarbore.
  • Iterați copiii direcți cu for child in node când aveți nevoie doar de copiii imediati.
  • Gestionați codificarea pe Windows: Pe Windows, sys.stdout poate folosi o pagină de coduri veche. Adăugați sys.stdout.reconfigure(encoding="utf-8", errors="replace") la pornire când tipăriți text Unicode.
  • Instalați [pdf] suplimentar: Nu importați SaveFormat.Pdf funcționalitatea fără să o instalați mai întâi pip install "aspose-note[pdf]". Fără ReportLab, salvarea în PDF va genera o eroare de import în timpul execuției.
 Română