Utvecklarguide
Aspose.Note FOSS for Python is a free, open-source library for reading Microsoft OneNote .one sektionfiler utan något beroende av Microsoft Office. Den tillhandahåller ett rent offentligt API under the aspose.note paket, modellerat efter Aspose.Note för .NET gränssnittet. Biblioteket är lämpligt för dokumentautomatisering, innehållsindexering, dataextraktionspipeline och arkiveringsarbetsflöden.
Denna utvecklarguide täcker hela det offentliga API-ytan som finns i version 26.3.1, med körbara kodexempel för varje huvudfunktion.
Laddning av dokument
Läs in en .one fil från en filsökväg eller en binär ström. Den Document klassen är ingångspunkten för alla operationer.
Läs in från en filsökväg
from aspose.note import Document
doc = Document("MyNotes.one")Läs in från en binär ström
Användbart när du läser från molnlagring, HTTP-svar eller minnesbuffertar:
from pathlib import Path
from aspose.note import Document
with Path("MyNotes.one").open("rb") as f:
doc = Document(f)Laddningsalternativ
Använd LoadOptions för att ange valfria parametrar vid inläsning:
from aspose.note import Document, LoadOptions
opts = LoadOptions()
opts.LoadHistory = True # Include page history in the DOM
doc = Document("MyNotes.one", opts)Obs: DocumentPassword finns på LoadOptions för API-kompatibilitet, men krypterade dokument stöds inte. Försök att läsa in en krypterad fil resulterar i IncorrectPasswordException.
Dokumentstruktur (DOM)
OneNote-dokumentmodellen är ett träd:
Document
└── Page (0..n)
├── Title
│ ├── TitleText (RichText)
│ ├── TitleDate (RichText)
│ └── TitleTime (RichText)
└── Outline (0..n)
└── OutlineElement (0..n)
├── RichText
├── Image
├── Table
│ └── TableRow
│ └── TableCell
│ └── RichText / Image
└── AttachedFileVarje nod exponerar ParentNode och en Document egenskap som går upp till roten. Sammansatta noder stödjer barniteration, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild, och GetChildNodes(Type).
Iterera sidor
Sidor är de direkta barnen till Document. Iterera dem direkt eller använd 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}]")Sidmetadata:
| Egenskap | Typ | Beskrivning |
|---|---|---|
Title | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
Textutdrag
Extrahera all vanlig text
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))Inspektera formateringssekvenser
Varje RichText innehåller en lista med TextRun segment. Varje körning har sin egen 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)}]")Extrahera hyperlänkar
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)Bildextraktion
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})")Bildegenskaper: FileName, Bytes, Width, Height, AlternativeTextTitle, AlternativeTextDescription, HyperlinkUrl, Tags.
Tabellparsning
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)Bifogade filer
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}")Taggar och numrerade listor
Inspektera NoteTag-poster
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}")Inspektera numrerade listor
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}")DocumentVisitor-mönster
Använd DocumentVisitor för att implementera en besökare som går igenom hela dokumentträdet:
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}")PDF-export
PDF-export kräver det valfria ReportLab-beroendet. Installera det med:
pip install "aspose-note[pdf]"Grundläggande PDF-export
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)PDF-export med alternativ
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()Obs: PdfSaveOptions.PageIndex och PageCount fält finns men vidarebefordras inte till PDF-exportören i v26.3.1. Hela dokumentet exporteras alltid.
Aktuella begränsningar
| Område | Status |
|---|---|
Läsning .one filer | Fullt stöd |
| PDF-export (via ReportLab) | Stöds |
Skriver tillbaka till .one | Ej implementerad |
| Krypterade dokument | Stöds inte (kastar IncorrectPasswordException) |
| HTML / bild / ONE-sparformat | Deklarerad för API-kompatibilitet; kasta UnsupportedSaveFormatException |
Tillgängliga guider
- Översikt över funktioner: fullständig funktionslista med bevis
- Komma igång: förutsättningar, installation och första steg
- Installation: pip install och valfria beroenden