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
                    └── AttachedFile

Varje 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:

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

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ådeStatus
Läsning .one filerFullt stöd
PDF-export (via ReportLab)Stöds
Skriver tillbaka till .oneEj implementerad
Krypterade dokumentStöds inte (kastar IncorrectPasswordException)
HTML / bild / ONE-sparformatDeklarerad för API-kompatibilitet; kasta UnsupportedSaveFormatException

Tillgängliga guider


Se även

 Svenska