Ghid pentru dezvoltatori

Aspose.Note FOSS for Python is a free, open-source library for reading Microsoft OneNote .one fișiere de secțiune fără nicio dependență de Microsoft Office. Oferă un API public curat sub the aspose.note pachet, modelat după interfața Aspose.Note pentru .NET. Biblioteca este potrivită pentru automatizarea documentelor, indexarea conținutului, conductele de extragere a datelor și fluxurile de lucru de arhivare.

Acest ghid pentru dezvoltatori acoperă întreaga suprafață a API-ului public disponibil în versiunea 26.3.1, cu exemple de cod executabile pentru fiecare funcționalitate majoră.

Încărcarea Documentului

Încarcă un .one fișier dintr-o cale de fișier sau dintr-un flux binar. The Document clasă este punctul de intrare pentru toate operațiunile.

Încărcare dintr-o cale de fișier

from aspose.note import Document

doc = Document("MyNotes.one")

Încărcare dintr-un flux binar

Util când se citește din stocare în cloud, răspunsuri HTTP sau buffer-e în memorie:

from pathlib import Path
from aspose.note import Document

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

Opțiuni de încărcare

Folosește LoadOptions pentru a seta parametri opționali la încărcare:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # Include page history in the DOM
doc = Document("MyNotes.one", opts)

Notă: DocumentPassword există pe LoadOptions pentru compatibilitate API, dar documentele criptate nu sunt suportate. Încercarea de a încărca un fișier criptat generează IncorrectPasswordException.


Structura Documentului (DOM)

Modelul de document OneNote este un arbore:

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

Fiecare nod expune ParentNode și un Document proprietate care urcă până la rădăcină. Nodurile compozite suportă iterarea copiilor, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild, și GetChildNodes(Type).


Iterarea Paginilor

Paginile sunt copiii direcți ai Document. Iterați-le direct sau folosiți GetChildNodes:

from aspose.note import Document, Page

doc = Document("MyNotes.one")

for page in doc:
    title = page.Title.TitleText.Text if page.Title and page.Title.TitleText else "(untitled)"
    author = page.Author or "(unknown)"
    print(f"  {title}  [by {author}]")

Metadatele paginii:

ProprietateTipDescriere
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`

Extracție de text

Extrage tot textul simplu

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
all_text = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print("\n".join(all_text))

Inspectează rulările de formatare

Fiecare RichText conține o listă de TextRun segmente. Fiecare rulare are propriul său TextStyle:

from aspose.note import Document, RichText

doc = Document("FormattedNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        style = run.Style
        flags = []
        if style.IsBold: flags.append("bold")
        if style.IsItalic: flags.append("italic")
        if style.IsHyperlink: flags.append(f"link={style.HyperlinkAddress}")
        print(f"{run.Text!r:40s} [{', '.join(flags)}]")

Extrage hyperlink-uri

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
            print(run.Text, "->", run.Style.HyperlinkAddress)

Extracție de imagini

from aspose.note import Document, Image

doc = Document("MyNotes.one")
for i, img in enumerate(doc.GetChildNodes(Image), start=1):
    name = img.FileName or f"image_{i}.bin"
    with open(name, "wb") as f:
        f.write(img.Bytes)
    print(f"Saved {name}  ({img.Width}x{img.Height})")

Proprietăți imagine: FileName, Bytes, Width, Height, AlternativeTextTitle, AlternativeTextDescription, HyperlinkUrl, Tags.


Analiză de tabel

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.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)
        row_text = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in cells
        ]
        print(f"Row {r}:", row_text)

Fișiere atașate

from aspose.note import Document, AttachedFile

doc = Document("NotesWithAttachments.one")
for i, af in enumerate(doc.GetChildNodes(AttachedFile), start=1):
    name = af.FileName or f"attachment_{i}.bin"
    with open(name, "wb") as f:
        f.write(af.Bytes)
    print(f"Saved: {name}")

Etichete și liste numerotate

Inspectează elementele NoteTag

from aspose.note import Document, RichText, Image, Table

doc = Document("TaggedNotes.one")
for rt in doc.GetChildNodes(RichText):
    for tag in rt.Tags:
        print(f"RichText tag: {tag.Label} icon={tag.Icon}")
for img in doc.GetChildNodes(Image):
    for tag in img.Tags:
        print(f"Image tag: {tag.Label}")

Inspectează listele numerotate

from aspose.note import Document, OutlineElement

doc = Document("NumberedNotes.one")
for oe in doc.GetChildNodes(OutlineElement):
    nl = oe.NumberList
    if nl:
        print(f"format={nl.Format!r}")

Modelul DocumentVisitor

Utilizați DocumentVisitor pentru a implementa un vizitator care parcurge întregul arbore al documentului:

from aspose.note import Document, DocumentVisitor, Page, RichText, Image

class ContentCounter(DocumentVisitor):
    def __init__(self):
        self.pages = 0
        self.texts = 0
        self.images = 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("MyNotes.one")
counter = ContentCounter()
doc.Accept(counter)
print(f"Pages: {counter.pages}, Texts: {counter.texts}, Images: {counter.images}")

Export PDF

Exportul PDF necesită dependența opțională ReportLab. Instaleaz-o cu:

pip install "aspose-note[pdf]"

Export PDF de bază

from aspose.note import Document, SaveFormat

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

Export PDF cu opțiuni

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

doc = Document("MyNotes.one")

##With save options
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)

##Save to in-memory stream
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()

Notă: PdfSaveOptions.PageIndex și PageCount câmpurile există, dar nu sunt transmise exportatorului PDF în v26.3.1. Întregul document este întotdeauna exportat.


Limitări curente

ZonăStare
Citire .one fișiereSuport complet
Export PDF (prin ReportLab)Suportat
Scriere înapoi la .oneNeimplementat
Documente criptateNu este suportat (declanșează IncorrectPasswordException)
Formate de salvare HTML / imagine / ONEDeclarat pentru compatibilitatea API; ridică UnsupportedSaveFormatException

Ghiduri disponibile


Vezi și

 Română