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
└── AttachedFileFiecare 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:
| Proprietate | Tip | Descriere |
|---|---|---|
Title | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
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șiere | Suport complet |
| Export PDF (prin ReportLab) | Suportat |
Scriere înapoi la .one | Neimplementat |
| Documente criptate | Nu este suportat (declanșează IncorrectPasswordException) |
| Formate de salvare HTML / imagine / ONE | Declarat pentru compatibilitatea API; ridică UnsupportedSaveFormatException |
Ghiduri disponibile
- Prezentare generală a funcționalităților: listă completă de funcționalități cu dovezi
- Începeți: prerechizite, instalare și primii pași
- Instalare: pip install și dependențe opționale