Работа с документа за бележки
Съветът на ЕС 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 собственост | Тип на изпитване | По подразбиране: | Описание на състоянието |
|---|---|---|---|
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 (от 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.IsConflictPage | True за синхронизирани копия с конфликтни данни |
Вижте също:
- Извличане на текст: извличане на обикновен текст и форматирани пробиви
- PDF изнасяне: опции за износ, избор на страници и изход от потока
- Снимки и приложения: извличане на вградени образи и прикрепени файлове
- Таблици: разглеждане на структурата на таблицата и съдържанието на клетките
- API референция: документ