Guia del desenvolupador

Aspose.Note FOSS for Python is a free, open-source library for reading Microsoft OneNote .one fitxers de secció sense cap dependència de Microsoft Office. Proporciona una API pública neta sota el aspose.note paquet, modelat segons la interfície Aspose.Note per a .NET. La biblioteca és adequada per a l’automatització de documents, indexació de contingut, canals d’extracció de dades i fluxos de treball d’arxiu.

Aquesta guia per a desenvolupadors cobreix tota la superfície de l’API pública disponible a la versió 26.3.1, amb exemples de codi executables per a cada característica principal.

Càrrega de documents

Carrega un .one fitxer des d’un camí de fitxer o un flux binari. El Document classe és el punt d’entrada per a totes les operacions.

Carrega des d’un camí de fitxer

from aspose.note import Document

doc = Document("MyNotes.one")

Carrega des d’un flux binari

Útil quan es llegeix des d’emmagatzematge al núvol, respostes HTTP o buffers en memòria:

from pathlib import Path
from aspose.note import Document

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

Opcions de càrrega

Utilitza LoadOptions per establir paràmetres opcionals en temps de càrrega:

from aspose.note import Document, LoadOptions

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

Nota: DocumentPassword existeix a LoadOptions per a la compatibilitat de l’API, però els documents encriptats no són compatibles. Intentar carregar un fitxer encriptat genera IncorrectPasswordException.


Estructura del document (DOM)

El model de document OneNote és un arbre:

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

Cada node exposa ParentNode i un Document propietat que puja fins a l’arrel. Els nodes compostos admeten iteració de fills, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild, i GetChildNodes(Type).


Iteració de pàgines

Les pàgines són els fills directes de Document. Itera-les directament o utilitza 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}]")

Metadades de la pàgina:

PropietatTipusDescripció
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`

Extracció de text

Extreu tot el text pla

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

Inspecciona les seqüències de format

Cada RichText conté una llista de TextRun segments. Cada execució porta el seu propi 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)}]")

Extreu hiperenllaços

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)

Extracció d’imatges

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

Propietats de la imatge: FileName, Bytes, Width, Height, AlternativeTextTitle, AlternativeTextDescription, HyperlinkUrl, Tags.


Anàlisi de taules

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)

Fitxers adjunts

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

Etiquetes i llistes numerades

Inspecciona els elements 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}")

Inspecciona les llistes numerades

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

Patró DocumentVisitor

Utilitza DocumentVisitor per implementar un visitador que recorre tot l’arbre del document:

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

Exportació PDF

L’exportació PDF requereix la dependència opcional ReportLab. Instal·la-la amb:

pip install "aspose-note[pdf]"

Exportació bàsica de PDF

from aspose.note import Document, SaveFormat

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

Exportació de PDF amb opcions

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()

Nota: PdfSaveOptions.PageIndex i PageCount existeixen camps però no s’envien a l’exportador PDF a la versió v26.3.1. El document complet sempre s’exporta.


Limitacions actuals

ÀreaEstat
Lectura .one fitxersTotalment compatible
Exportació PDF (via ReportLab)Compatible
Escriure de nou a .oneNo implementat
Documents encriptatsNo compatible (lansa IncorrectPasswordException)
Formats de desament HTML / imatge / ONEDeclarat per compatibilitat d’API; raise UnsupportedSaveFormatException

Guies disponibles


Vegeu també

 Català