Посібник розробника
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 | `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 та додаткові залежності