Przewodnik programisty

Aspose.Note FOSS for Python is a free, open-source library for reading Microsoft OneNote .one pliki sekcji bez żadnych zależności od Microsoft Office. Zapewnia czyste publiczne API pod aspose.note pakiet, wzorowany na interfejsie Aspose.Note dla .NET. Biblioteka jest odpowiednia do automatyzacji dokumentów, indeksowania treści, potoków ekstrakcji danych oraz przepływów pracy archiwizacji.

Ten przewodnik dla deweloperów opisuje pełny publiczny interfejs API dostępny w wersji 26.3.1, zawierający działające przykłady kodu dla każdej głównej funkcji.

Ładowanie dokumentu

Wczytaj .one plik z ścieżki pliku lub strumienia binarnego. Ten Document klasa jest punktem wejścia dla wszystkich operacji.

Wczytaj z ścieżki pliku

from aspose.note import Document

doc = Document("MyNotes.one")

Wczytaj ze strumienia binarnego

Przydatne przy odczycie z pamięci chmurowej, odpowiedzi HTTP lub buforów w pamięci:

from pathlib import Path
from aspose.note import Document

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

Opcje ładowania

Użyj LoadOptions aby ustawić opcjonalne parametry w czasie wczytywania:

from aspose.note import Document, LoadOptions

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

Uwaga: DocumentPassword istnieje na LoadOptions dla zgodności API, ale zaszyfrowane dokumenty nie są obsługiwane. Próba wczytania zaszyfrowanego pliku powoduje IncorrectPasswordException.


Struktura dokumentu (DOM)

Model dokumentu OneNote jest drzewem:

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

Każdy węzeł udostępnia ParentNode i Document właściwość, która przechodzi do korzenia. Węzły złożone obsługują iterację dzieci, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild, i GetChildNodes(Type).


Iterowanie stron

Strony są bezpośrednimi dziećmi Document. Iteruj je bezpośrednio lub użyj 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}]")

Metadane strony:

WłaściwośćTypOpis
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`

Ekstrakcja tekstu

Wyodrębnij cały tekst zwykły

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

Sprawdź fragmenty formatowania

Każdy RichText zawiera listę TextRun segmentów. Każde uruchomienie posiada własne 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)}]")

Wyodrębnij hiperłącza

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)

Ekstrakcja obrazów

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

Właściwości obrazu: FileName, Bytes, Width, Height, AlternativeTextTitle, AlternativeTextDescription, HyperlinkUrl, Tags.


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

Załączone pliki

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

Tagi i listy numerowane

Sprawdź elementy 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}")

Sprawdź listy numerowane

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

Wzorzec DocumentVisitor

Użyj DocumentVisitor do zaimplementowania odwiedzającego, który przechodzi całe drzewo dokumentu:

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

Eksport PDF

Eksport PDF wymaga opcjonalnej zależności ReportLab. Zainstaluj ją za pomocą:

pip install "aspose-note[pdf]"

Podstawowy eksport PDF

from aspose.note import Document, SaveFormat

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

Eksport PDF z opcjami

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

Uwaga: PdfSaveOptions.PageIndex oraz PageCount pola istnieją, ale nie są przekazywane do eksportera PDF w wersji v26.3.1. Cały dokument jest zawsze eksportowany.


Obecne ograniczenia

ObszarStatus
Odczyt .one plikiW pełni obsługiwane
Eksport PDF (przez ReportLab)Obsługiwane
Zapisz z powrotem do .oneNiezaimplementowane
Zaszyfrowane dokumentyNieobsługiwane (wywołuje IncorrectPasswordException)
HTML / obraz / ONE formaty zapisuZadeklarowano dla zgodności API; podnieś UnsupportedSaveFormatException

Dostępne przewodniki


Zobacz także

 Polski