Работа с документом "Записка"
В связи с этим 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 имущество | Тип: | По умолчанию | Описание: |
|---|---|---|---|
LoadHistory | bool | False | Когда? True, пересмотренные страницы историй включены в DOM и доступны через Document.GetPageHistory |
DocumentPassword | `str | None` | 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 | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
IsConflictPage | bool | True если страница является копией конфликта синхронизации |
Пересечение дерева документов
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.IsConflictPage | True для копий с синхронизацией конфликта |
См. также:
- Вытяжка текста: извлечение простого текста и форматированных пробегов.
- PDF экспортировать: варианты экспорта, выбор страниц и выход потока.
- Изображения и приложения: извлечение встроенных изображений и приложенных файлов.
- Таблицы: анализ структуры таблицы и содержания ячеек
- Ссылка на API: документ