Работа с документом "Записка"

В связи с этим Document класс является корнем Aspose.Note для Python document object model (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 (с 1 января) 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 нагруженныйФайл зашифрован; не поддерживаются заšifrные документы.Получить незашифрованную копию файла .
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 является: поддерживается только выходной режим.

Как я читаю конкретную страницу по названию?

Итерация страниц и сравнение 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 для копий с синхронизацией конфликта

См. также:

 Русский