Работа с документа за бележки

Съветът на ЕС Document класът е корен на Aspose.Запис за Python документ обектен модел (DOM). Всяка четене, преминаване или износ започва с Document Инстанция, която представлява: еднократна .one Файл от секция.


Зареждане на документ

Зареждане от пътека на файл

Предайте пътя на “А”. .one Да се подаде директно в Document конструктор:

from aspose.note import Document

doc = Document("MyNotes.one")

Натоварване от двоичен поток

Използвайте файлов обект, когато данните идват от мрежов отговор, облачен блок за съхранение или буфер в паметта:

from pathlib import Path
from aspose.note import Document

with Path("MyNotes.one").open("rb") as f:
    doc = Document(f)

Създаване на празен документ

Постройте един Document без аргументи за създаване на нов OneNote документ по програма:

from aspose.note import Document, Page

doc = Document()
doc.AppendChildLast(Page())

Зареждане с опции

Използване на: LoadOptions за определяне на необязателни параметри по време на зареждане:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # include page revision history in the DOM
doc = Document("MyNotes.one", opts)
LoadOptions собственостТип на изпитванеПо подразбиране:Описание на състоянието
LoadHistoryboolFalseКога? True, преработките на историята са включени в DOM и достъпни чрез: Document.GetPageHistory
DocumentPassword`strNone`None

Откриване на формат на документа

Съветът на ЕС FileFormat свойството идентифицира кой вариант на формат OneNote използва файлът:

from aspose.note import Document, FileFormat

doc = Document("MyNotes.one")

if doc.FileFormat == FileFormat.OneNote2010:
    print("OneNote 2010 format")
elif doc.FileFormat == FileFormat.OneNoteOnline:
    print("OneNote Online format")
elif doc.FileFormat == FileFormat.OneNote2007:
    print("OneNote 2007 format")
else:
    print("Format:", doc.FileFormat)
FileFormat стойностОписание на състоянието
OneNote2010Стандартно .one файл, написан от OneNote 2010 и по-късно
OneNoteOnline.one файл, написан от OneNote Online / Microsoft 365
OneNote2007Наследство .one формат от OneNote 2007
UnknownНе може да се идентифицира форматът

Итерационни страници

Страници са пряко дете на Document.Използвайте: for цикъл за проста итерация:

from aspose.note import Document

doc = Document("MyNotes.one")

for page in doc:
    title_text = (
        page.Title.TitleText.Text
        if page.Title and page.Title.TitleText
        else "(untitled)"
    )
    author = page.Author or "(unknown)"
    level = page.Level or 1
    indent = "  " * (level - 1)
    print(f"{indent}{title_text}  [by {author}]")

Използване на: GetChildNodes(Page) за да получите напечатан списък с всички страници едновременно:

from aspose.note import Document, Page

doc = Document("MyNotes.one")
pages = doc.GetChildNodes(Page)
print(f"Total pages: {len(pages)}")

Метаданни за страницата

ИмотътТип на изпитванеОписание на състоянието
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`
IsConflictPageboolTrue ако страницата е синхронизирана конфликтна копия

Преминаване през дървото на документа

Document наследява от: CompositeNode, като му дават пълноценни методи за преминаване през дърветата:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")

# Extract all plain text from the entire document
all_text = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print("\n".join(all_text))

Иерархията на DOM:

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

Основни методи за преминаване, наследени от CompositeNode:

Методът:Описание на състоянието
GetChildNodes(NodeType)Връщане на въведен списък с всички потомци, съответстващи на дадения тип.
AppendChildLast(node)Добавяне на подчинен възел в края на списъка с деца
AppendChildFirst(node)Добавяне на дете в началото
InsertChild(index, node)Вмъкнете дете в определен индекс.
RemoveChild(node)Да премахнете подчинен възел
GetEnumerator()Итеративни директни деца

История на страницата

Когато е натоварен с: LoadHistory=True, Document.GetPageHistory връща всички запазени преработки от една страница, подредени от най-старите до най -новите:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True
doc = Document("MyNotes.one")

for page in doc.GetChildNodes(None.__class__.__mro__[0]):  # iterate pages
    pass

# Get revisions for a specific page
import aspose.note as an

doc2 = Document("MyNotes.one", opts)
pages = doc2.GetChildNodes(an.Page)
if pages:
    history = doc2.GetPageHistory(pages[0])
    print(f"Revision count: {history.Count}")
    for rev in history:
        print(f"  Modified: {rev.LastModifiedTime}")

Забележка:: GetPageHistory връща празно число. PageHistory да се възрази, когато: LoadHistory е в: False Винаги е зададен. opts.LoadHistory = True преди товарене, ако е необходимо. данни за ревизия.


Съхранение и износ

Използване на: Document.Save PDF е единственият поддържан формат за износ.

Запази в файл

from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)

Запазване в поток от паметта

import io
from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, SaveFormat.Pdf)
pdf_bytes = buf.getvalue()

Запазване с опции

Използване на: PdfSaveOptions (от aspose.note.saving) за контрол на избора на страници:

import io
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions

doc = Document("MyNotes.one")

# Export pages 2 and 3 only (zero-based index)
opts = PdfSaveOptions(PageIndex=1, PageCount=2)
buf = io.BytesIO()
doc.Save(buf, opts)
pdf_bytes = buf.getvalue()

Важно е.: Износът на PDF изисква независимостта ReportLab. Инсталирайте го с: pip install "aspose-note[pdf]".


Откриване на промени в оформлението

Обади се. DetectLayoutChanges след промяна на документа за преизчисляване на метриките за оформление преди съхранение:

from aspose.note import Document, Page

doc = Document()
page = Page()
doc.AppendChildLast(page)

# ... add content to page ...

doc.DetectLayoutChanges()
doc.Save("output.pdf")

Съвети и най-добри практики

  • Зареждане веднъж, запитване много пъти.: Document заредени с целия .one Файл в паметта на - Задръжте. Document Инстанция и повикване GetChildNodes многократно, отколкото презареждане на файла за всеки запитване.
  • Проверка. IsConflictPage: Синхронизирането в OneNote може да създаде страници с конфликт. Филтрирайте със [p for p in doc if not p.IsConflictPage] преди обработката на съдържанието.
  • Използване на: LoadHistory=False (по подразбиране) за скорост: История на страницата добавя значителна памет и Само настройка. LoadHistory=True когато изрично се нуждаете от данни за ревизия.
  • Поток за големи файлове: Предаване на отворен файл обект вместо стъпка път при четене големи .one файлове, за да избегнем отварянето на файла след завършване на анализа.
  • Обади се. DetectLayoutChanges преди това Save: При програмиране на документ и свързващи се възли, повикване DetectLayoutChanges() да се гарантира, че координатите на разположението са: съответстващ преди износ на PDF.

Общи проблеми

ИзданиеПричина за товаРемонтиране
IncorrectPasswordException на товарФайлът е криптиран; не се поддържат зашифровани документиИзползване на нешифровано копие от файла.
FileCorruptedException на товарФайлът е прекъснат или има неподдържан вътрешен формат.Проверете дали файлът е валиден. .one секция (не е част от .onetoc2 съдържание)
UnsupportedSaveFormatException на запазванеОпита се да запишете в друг формат, различен от PDF.Само с… SaveFormat.Pdf се поддържа за износ.
Пусто е. GetPageHistory резултат от товаLoadOptions.LoadHistory не е зададен на: True преди натоварванеПрезареждане на документа с: opts.LoadHistory = True
ModuleNotFoundError: reportlabОпит за износ на PDF без допълнителния PDFБягай! pip install "aspose-note[pdf]"

FAQ

Какви формати на OneNote могат да бъдат използвани.Четена бележка?

Всички три формата на раздела в OneNote: OneNote2007, OneNote2010, и OneNoteOnline. Използване на: doc.FileFormat да се идентифицира кой вариант е бил зареден.

Мога ли да пиша на… .one - Да. Ще го прочетеш ли?

Пиша на… .one Износ на PDF с Document.Save е в съответствие с член 107, параграф 1. само поддържа изходната операция.

Как да прочета конкретна страница по заглавие?

Итерации на страници и сравняване page.Title.TitleText.Text към целевата нишка:

from aspose.note import Document

doc = Document("MyNotes.one")
target = next(
    (p for p in doc
     if p.Title and p.Title.TitleText and p.Title.TitleText.Text == "My Page"),
    None,
)

Как да преброя подстраниците отделно от страниците на най-високо ниво?

Използване на: page.Level: ниво 1 е най-високо, ниво 2 е подстраница и така нататък.

from aspose.note import Document

doc = Document("MyNotes.one")
top_level = [p for p in doc if (p.Level or 1) == 1]
sub_pages  = [p for p in doc if (p.Level or 1) > 1]
print(f"Top-level: {len(top_level)}, Sub-pages: {len(sub_pages)}")

За целта.Значение за подкрепа .onetoc2 - Файлове за съдържание?

Не, само… .one файловете на секцията са поддържани. .onetoc2 Ноутбуковете ще се повишат. FileCorruptedException.


Снимка на API референтна информация

Клас / методОписание на състоянието
Document(path_or_stream, options?)Зареждане на а .one да се създаде празен документ или файл
Document.FileFormatОткрит формат вариант (FileFormat еум)
Document.GetChildNodes(NodeType)Извличане на всички последователни възли от даден тип
Document.GetPageHistory(page)Получете историята на ревизии за страница (изисква се) LoadHistory=True)
Document.Save(target, format_or_options)Износ на PDF по път или поток за файл
Document.DetectLayoutChanges()Преизчисляване на метриките за оформление след програмирани редакти
Document.Accept(visitor)Да се разхождате по DOM, използвайки DocumentVisitor Подклас
LoadOptions.LoadHistoryНастройка на: True да включи преработвания на страници в DOM
LoadOptions.DocumentPasswordРезервирани; криптирани файлове за изтегляне. IncorrectPasswordException
FileFormatЕнум: OneNote2010, OneNoteOnline, OneNote2007, Unknown
SaveFormat.PdfЕдинственият поддържан формат за износ
PageHistory.CountБроят на наличните преработки на страници
Page.LevelДълбочина на подстраницата (1 = най-високо ниво)
Page.IsConflictPageTrue за синхронизирани копия с конфликтни данни

Вижте също:

 Български