Посібник розробника

Aspose.Note FOSS for Python is a free, open-source library for reading Microsoft OneNote .one файли розділів без будь-якої залежності від Microsoft Office. Він надає чистий публічний API під aspose.note пакет, змодельований за зразком інтерфейсу Aspose.Note для .NET. Бібліотека підходить для автоматизації документів, індексації вмісту, конвеєрів вилучення даних та архівних робочих процесів.

Цей посібник для розробників охоплює повний публічний API, доступний у версії 26.3.1, з виконуваними прикладами коду для кожної основної функції.

Завантаження документа

Завантажити .one файл за шляхом до файлу або бінарним потоком. Цей Document class є точкою входу для всіх операцій.

Завантажити за шляхом до файлу

from aspose.note import Document

doc = Document("MyNotes.one")

Завантажити з бінарного потоку

Корисно при читанні з хмарного сховища, HTTP‑відповідей або буферів у пам’яті:

from pathlib import Path
from aspose.note import Document

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

Параметри завантаження

Використовуйте LoadOptions для встановлення необов’язкових параметрів під час завантаження:

from aspose.note import Document, LoadOptions

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

Примітка: DocumentPassword існує на LoadOptions для сумісності API, але зашифровані документи не підтримуються. Спроба завантажити зашифрований файл викликає IncorrectPasswordException.


Структура документа (DOM)

Модель документа OneNote є деревом:

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

Кожен вузол надає ParentNode і a Document властивість, яка піднімається до кореня. Складені вузли підтримують ітерацію дочірніх елементів, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild, і GetChildNodes(Type).


Ітерація сторінок

Сторінки є безпосередніми дочірніми елементами Document. Ітеруйте їх безпосередньо або використовуйте 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}]")

Метадані сторінки:

ВластивістьТипОпис
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`

Витяг тексту

Витягнути весь простий текст

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

Переглянути ділянки форматування

Кожен RichText містить список TextRun сегменти. Кожен запуск несе свій 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)}]")

Витягнути гіперпосилання

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)

Витяг зображень

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

Властивості зображення: FileName, Bytes, Width, Height, AlternativeTextTitle, AlternativeTextDescription, HyperlinkUrl, Tags.


Розбір таблиць

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)

Прикріплені файли

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

Теги та нумеровані списки

Переглянути елементи 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}")

Переглянути нумеровані списки

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

Використовуйте DocumentVisitor для реалізації відвідувача, який обходить усе дерево документа:

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

Експорт PDF вимагає необов’язкову залежність ReportLab. Встановіть її за допомогою:

pip install "aspose-note[pdf]"

Базовий експорт PDF

from aspose.note import Document, SaveFormat

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

Експорт PDF з параметрами

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

Примітка: PdfSaveOptions.PageIndex і PageCount поля існують, але не передаються у PDF-експортер у v26.3.1. Увесь документ завжди експортується.


Поточні обмеження

ОбластьСтатус
Читання .one файлиПовністю підтримується
Експорт PDF (через ReportLab)Підтримується
Запис назад у .oneНе реалізовано
Зашифровані документиНе підтримується (викликає IncorrectPasswordException)
Формати збереження HTML / image / ONEОголошено для сумісності API; викликати UnsupportedSaveFormatException

Доступні посібники


Див. також

 Українська