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
└── AttachedFileKaż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ść | Typ | Opis |
|---|---|---|
Title | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
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
| Obszar | Status |
|---|---|
Odczyt .one pliki | W pełni obsługiwane |
| Eksport PDF (przez ReportLab) | Obsługiwane |
Zapisz z powrotem do .one | Niezaimplementowane |
| Zaszyfrowane dokumenty | Nieobsługiwane (wywołuje IncorrectPasswordException) |
| HTML / obraz / ONE formaty zapisu | Zadeklarowano dla zgodności API; podnieś UnsupportedSaveFormatException |
Dostępne przewodniki
- Przegląd funkcji: pełna lista funkcji z dowodami
- Rozpoczęcie: wymagania wstępne, instalacja i pierwsze kroki
- Instalacja: pip install i opcjonalne zależności