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
└── AttachedFileCada 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:
| Propietat | Tipus | Descripció |
|---|---|---|
Title | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
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
| Àrea | Estat |
|---|---|
Lectura .one fitxers | Totalment compatible |
| Exportació PDF (via ReportLab) | Compatible |
Escriure de nou a .one | No implementat |
| Documents encriptats | No compatible (lansa IncorrectPasswordException) |
| Formats de desament HTML / imatge / ONE | Declarat per compatibilitat d’API; raise UnsupportedSaveFormatException |
Guies disponibles
- Visió general de les funcionalitats: llista completa de funcionalitats amb evidència
- Introducció: requisits previs, instal·lació i primers passos
- Instal·lació: pip install i dependències opcionals