Преглед на функциите — 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, FileFormat
  • Page: директно дете на Document; излага Title, Author, CreationTime, LastModifiedTime, Level
  • Title: излага TitleText, TitleDate, TitleTime (всички RichText възли)
  • Outline: позиционен контейнер с HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: листов контейнер; излага 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 съдържа:

СвойствоТипОписание
TextstrТекст на сегмента
StyleTextStyleМетаданни за форматиране

TextStyle свойства:

СвойствоТип
IsBold, IsItalic, IsUnderline, IsStrikethroughbool
IsSuperscript, IsSubscriptbool
FontName`str
FontSize`float
FontColor, Highlight`int
Language`int
IsHyperlinkbool
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`strNone`
BytesbytesНеобработени данни на изображението
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[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`strNone`
BytesbytesСурови данни от файла
Tagslist[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 изложи пълната структура на таблицата:

КласКлючови свойства
TableColumns: 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`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Фабричен метод: 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`strNone`
Restart`intNone`
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

ОпцияТипОписание
PageIndexintПолето съществува; не се предава към PDF експортер в v26.3.1 (няма ефект)
PageCount`intNone`
ImageCompression`AnyNone`
JpegQuality`intNone`
PageSettings`AnyNone`
PageSplittingAlgorithm`AnyNone`
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 ще предизвика грешка при импортиране по време на изпълнение.
 Български