Руководство разработчика
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 файл из пути к файлу или бинарного потока. The Document класс является точкой входа для всех операций.
Загрузка из пути к файлу
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 и 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 | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
Извлечение текста
Извлечь весь обычный текст
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 |
Доступные руководства
- Обзор функций: полный список функций с доказательствами
- Начало работы: предварительные требования, установка и первые шаги
- Установка: pip install и необязательные зависимости