Огляд функцій — Aspose.Note FOSS для Python
Aspose.Note FOSS for Python (package aspose-note, version 26.3.1) надає Python API для читання Microsoft OneNote .one файли розділів і експортує їх у PDF. Усі функції, перелічені нижче, перевірені за допомогою вихідного коду репозиторію, README та прикладних скриптів.
Встановлення та налаштування
Встановіть з PyPI:
pip install aspose-noteДля підтримки експорту у PDF (потрібен ReportLab):
pip install "aspose-note[pdf]"Вимоги: Python 3.10 або новіше. Не потрібна установка Microsoft Office.
Функції та можливості
.Завантаження файлів .one
Завантажуйте файли розділів Microsoft OneNote з шляху до файлу або будь-якого бінарного потоку (дескриптор файлу, io.BytesIO, тіло HTTP‑відповіді, потік хмарного сховища).
Document.FileFormatнадає приблизне визначення версії формату файлу OneNote (OneNote2010, OneNoteOnline або OneNote2007)- Завантаження на основі потоків усуває дискові I/O для робочих процесів у пам’яті або мережі
LoadOptions.LoadHistoryпрапорець контролює, чи включено історію сторінок у DOM
from aspose.note import Document
##From a file path
doc = Document("notebook.one")
##From a binary stream
with open("notebook.one", "rb") as f:
doc = Document(f)Обхід DOM документа
Повний документ OneNote представлений у вигляді дерева типізованих Python об’єктів. Кожен вузол успадковується від Node або CompositeNode:
Document:корінь; відкриваєDisplayName,CreationTime,FileFormatPage:прямий нащадокDocument; відкриваєTitle,Author,CreationTime,LastModifiedTime,LevelTitle: відкриваєTitleText,TitleDate,TitleTime(всіRichTextвузли)Outline: позиційний контейнер зHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: листковий контейнер; відкриваєNumberList
Методи навігації по CompositeNode:
| Метод / Властивість | Опис |
|---|---|
FirstChild, LastChild | Прямий доступ до дочірнього елемента |
GetChildNodes(Type) | Рекурсивний пошук з фільтрацією за типом |
AppendChildLast(node) | Додати дочірній елемент у кінець |
AppendChildFirst(node) | Додати дочірній елемент на початок |
InsertChild(index, node) | Вставити у позицію |
RemoveChild(node) | Видалити дочірній елемент |
for child in node | Перебрати безпосередніх дочірніх |
from aspose.note import Document, Page, Outline, OutlineElement, RichText
doc = Document("notebook.one")
for page in doc.GetChildNodes(Page):
title_text = page.Title.TitleText.Text if page.Title and page.Title.TitleText else ""
print(f"Page: {title_text}")
for outline in page.GetChildNodes(Outline):
for oe in outline.GetChildNodes(OutlineElement):
for rt in oe.GetChildNodes(RichText):
print(f" {rt.Text}")Витяг вмісту Rich Text
RichText вузли надають:
Text: str: повний простий текстовий рядокTextRuns: list[TextRun]: список форматованих сегментівTags: list[NoteTag]: теги OneNote, прикріплені до цього блокуAppend(text, style=None): додати текстовий фрагмент у пам’ятіReplace(old_value, new_value): підстановка рядка у пам’яті
Кожен TextRun містить:
| Властивість | Тип | Опис |
|---|---|---|
Text | str | Текст сегмента |
Style | TextStyle | Метадані форматування |
TextStyle властивості:
| Властивість | Тип |
|---|---|
IsBold, IsItalic, IsUnderline, IsStrikethrough | bool |
IsSuperscript, IsSubscript | bool |
FontName | `str |
FontSize | `float |
FontColor, Highlight | `int |
Language | `int |
IsHyperlink | bool |
HyperlinkAddress | `str |
from aspose.note import Document, RichText
doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.TextRuns:
if run.Style.IsHyperlink:
print(f"Hyperlink: {run.Text} -> {run.Style.HyperlinkAddress}")
if run.Style.IsBold:
print(f"Bold text: {run.Text}")Витяг зображень
Image вузли надають необроблені байти та метадані для кожного вбудованого зображення:
| Властивість | Тип | Опис |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Необроблені дані зображення |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[NoteTag] | Прикріплені теги OneNote |
from aspose.note import Document, Image
doc = Document("notebook.one")
for i, img in enumerate(doc.GetChildNodes(Image), start=1):
filename = img.FileName or f"image_{i}.bin"
with open(filename, "wb") as f:
f.write(img.Bytes)
print(f"Saved: {filename} ({img.Width} x {img.Height} pts)")Витяг прикріплених файлів
AttachedFile вузли виявляють вбудовані файлові вкладення:
| Властивість | Тип | Опис |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Необроблені дані файлу |
Tags | list[NoteTag] | Прикріплені теги OneNote |
from aspose.note import Document, AttachedFile
doc = Document("notebook.one")
for i, af in enumerate(doc.GetChildNodes(AttachedFile), start=1):
filename = af.FileName or f"attachment_{i}.bin"
with open(filename, "wb") as f:
f.write(af.Bytes)Розбір таблиць
Table, TableRow, і TableCell розкрити повну структуру таблиці:
| Клас | Ключові властивості |
|---|---|
Table | Columns: list[TableColumn] (кожен TableColumn має .Width і .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Ітерація клітинок за допомогою GetChildNodes(TableCell) |
TableCell | Містить RichText, Image, і інші вузли вмісту |
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("notebook.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)
values = [
" ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
for cell in cells
]
print(f"Row {r}:", values)Перевірка тегів OneNote
NoteTag з’являється на RichText, Image, AttachedFile, і Table вузли через їх .Tags властивість. OutlineElement не має .Tags властивість. NoteTag властивості:
| Властивість | Тип | Опис |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
Фабричний метод: NoteTag.CreateYellowStar() створює стандартний вузол тегу жовтої зірки.
from aspose.note import Document, RichText
doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
for tag in rt.Tags:
print(f"Tag: {tag.Label} (icon={tag.Icon}, completed={tag.CompletedTime})")Підтримка нумерованих списків
OutlineElement.NumberList надає:
| Властивість | Тип | Опис |
|---|---|---|
Format | `str | None` |
Restart | `int | None` |
from aspose.note import Document, OutlineElement
doc = Document("notebook.one")
for oe in doc.GetChildNodes(OutlineElement):
nl = oe.NumberList
if nl:
print(f"format={nl.Format!r}")Обхід DocumentVisitor
DocumentVisitor надає патерн відвідувача для структурованого обходу всього документа. Перевизначте будь‑який VisitXxxStart / VisitXxxEnd метод, щоб перехоплювати конкретні типи вузлів:
VisitDocumentStart(doc)/VisitDocumentEnd(doc)VisitPageStart(page)/VisitPageEnd(page)VisitTitleStart(title)/VisitTitleEnd(title)VisitOutlineStart(outline)/VisitOutlineEnd(outline)VisitOutlineElementStart(oe)/VisitOutlineElementEnd(oe)VisitRichTextStart(rt)/VisitRichTextEnd(rt)VisitImageStart(img)/VisitImageEnd(img)
from aspose.note import Document, DocumentVisitor, Page, RichText, Image
class MySummaryVisitor(DocumentVisitor):
def __init__(self):
self.pages, self.texts, self.images = 0, 0, 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("notebook.one")
v = MySummaryVisitor()
doc.Accept(v)
print(f"Pages={v.pages} RichText={v.texts} Images={v.images}")Експорт PDF
Зберегти завантажений документ у PDF за допомогою Document.Save(). Підтримується через необов’язковий бекенд ReportLab.
from aspose.note import Document, SaveFormat
doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)PdfSaveOptions
| Опція | Тип | Опис |
|---|---|---|
PageIndex | int | Поле існує; не передається експортеру PDF у v26.3.1 (не має ефекту) |
PageCount | `int | None` |
ImageCompression | `Any | None` |
JpegQuality | `int | None` |
PageSettings | `Any | None` |
PageSplittingAlgorithm | `Any | None` |
import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions
doc = Document("notebook.one")
##Save to file
doc.Save("output.pdf", SaveFormat.Pdf)
##Save to in-memory stream
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()Довідник форматів та перерахувань
SaveFormat
| Значення | Статус |
|---|---|
SaveFormat.Pdf | Реалізовано (вимагає ReportLab) |
FileFormat
Document.FileFormat надає найкращу можливу індикацію версії формату файлу OneNote. Перелічення оголошує три значення:
| Значення | Опис |
|---|---|
FileFormat.OneNote2010 | Формат OneNote 2010 |
FileFormat.OneNoteOnline | Формат OneNote Online |
FileFormat.OneNote2007 | Формат OneNote 2007 |
NodeType
NodeType.Document, NodeType.Page, NodeType.Outline, NodeType.OutlineElement, NodeType.RichText, NodeType.Image, NodeType.Table, NodeType.AttachedFile
HorizontalAlignment
HorizontalAlignment.Left, HorizontalAlignment.Center, HorizontalAlignment.Right
Поточні обмеження
| Обмеження | Деталь |
|---|---|
| Тільки для читання | Запис назад у .one формат не реалізовано |
| Без шифрування | Шифровані документи викликають IncorrectPasswordException |
| PDF лише для експорту | Інше SaveFormat значення піднімаються UnsupportedSaveFormatException |
| ReportLab потрібен для PDF | Встановити pip install "aspose-note[pdf]" окремо |
GetPageHistory повертає список з одним елементом | Повний обхід історії сторінок — це заглушка; повертає [page] |
DetectLayoutChanges() | Заглушка сумісності; без дії |
Поради та кращі практики
- Перевірте на None:
Page.Title,Title.TitleText,OutlineElement.NumberList, і більшість полів метаданих можуть бутиNone. Завжди захищайте за допомогоюif x is not Noneабоif xперед доступом до властивостей. - Використовуйте
GetChildNodes(Type)для рекурсивного пошуку замість ручного перебору дерева. Він шукає весь піддерево. - Перебирайте прямі дочірні елементи з
for child in nodeколи вам потрібні лише безпосередні дочірні елементи. - Обробляйте кодування у Windows: у Windows,
sys.stdoutможе використовувати застарілу кодову сторінку. Додайтеsys.stdout.reconfigure(encoding="utf-8", errors="replace")при запуску під час виведення Unicode‑тексту. - Встановіть
[pdf]додаткові: Не імпортуйтеSaveFormat.Pdfфункціональність без попередньої установкиpip install "aspose-note[pdf]". Без ReportLab, збереження у PDF викличе помилку імпорту під час виконання.