Преглед на функциите — Aspose.Note FOSS за Python
Aspose.Note FOSS for Python (package aspose-note, версия 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. Enum‑ът декларира три стойности:
| Стойност | Описание |
|---|---|
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 ще предизвика грешка при импортиране по време на изпълнение.