Lucrarea cu documentul de notă

În ceea ce priveşte Document clasa este rădăcina Aspose.Note pentru modelul obiectului document Python (DOM). Fiecare citire, traversare sau export operațiuni începe cu un Document o instanţă care reprezintă un singur .one secţiunea dosar.


Încărcarea unui document

Încărcare de pe o cale a fișierului

Treci pe o cale. .one - Da, domnule. Document constructor:

from aspose.note import Document

doc = Document("MyNotes.one")

Sarcină dintr-un flux binar

Utilizați un obiect similar fișierului atunci când datele provin dintr-un răspuns de rețea, o bucătărie în cloud sau din memorie:

from pathlib import Path
from aspose.note import Document

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

Crearea unui document gol

Construiţi un Document fără argumente pentru a crea un nou document OneNote programatic:

from aspose.note import Document, Page

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

Sarcină cu opțiuni

Utilizare: LoadOptions pentru a stabili parametri opționali la timpul de încărcare:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # include page revision history in the DOM
doc = Document("MyNotes.one", opts)
LoadOptions proprietateTipul de vehiculDefaultDescriere:
LoadHistoryboolFalseCând ? True, revizuirile istoricului paginii sunt incluse în DOM şi accesibile prin intermediul Document.GetPageHistory
DocumentPassword`strNone`None

Detectarea formatului documentelor

În ceea ce priveşte FileFormat proprietatea identifică care variantă de format OneNote folosește fișierul:

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 valoareDescriere:
OneNote2010Standardul .one fișier scris de OneNote 2010 și ulterior
OneNoteOnline.one fişier scris de OneNote Online / Microsoft 365
OneNote2007Moştenire .one format din OneNote 2007
UnknownFormat nu a putut fi identificat

Pagini iterative

Paginile sunt copii direcţi ai Document.Foloseste un for buclă pentru iterare simplă:

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}]")

Utilizare: GetChildNodes(Page) pentru a obține o listă tipografată de toate paginile la un moment dat:

from aspose.note import Document, Page

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

Metadate de pagină

ProprietateTipul de vehiculDescriere:
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`
IsConflictPageboolTrue dacă pagina este o copie de conflict sincronizată

Trecerea prin arborele documentelor

Document moștenire de la: CompositeNode, oferindu-i metode complete de traversare a arborilor:

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))

Ierarhia 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

Metodele cheie de traversare moștenite din CompositeNode:

Metoda de evaluareDescriere:
GetChildNodes(NodeType)Întoarce o listă tipată a tuturor descendenților care corespund tipului dat.
AppendChildLast(node)Adăugați un nod copil la sfârșitul listei de copii
AppendChildFirst(node)Adăugați un nod copil la început
InsertChild(index, node)Introduce un copil la un anumit index.
RemoveChild(node)Îndepărtează un nod copil
GetEnumerator()Copii direcți iterativi

Istoricul paginii

Când este încărcat cu: LoadHistory=True, Document.GetPageHistory returnă toate reviziunile salvate de o pagină, ordonate din cea mai veche la cea recentă:

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}")

Notă:: GetPageHistory returnă un gol. PageHistory obiect atunci când LoadHistory este: False Întotdeauna setat. opts.LoadHistory = True înainte de încărcare, dacă este necesar. datele de revizuire.


Economisirea şi exportul

Utilizare: Document.Save PDF este singurul format de export suportat.

Salvare într-un fişier

from aspose.note import Document, SaveFormat

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

Salvare într-un flux în memorie

import io
from aspose.note import Document, SaveFormat

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

Salvare cu opțiuni

Utilizare: PdfSaveOptions (din aspose.note.saving) pentru a controla selecția paginii:

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()

Importantă.: Exportul PDF necesită dependența opțională ReportLab. Instalaţi-o cu: pip install "aspose-note[pdf]".


Detectarea schimbărilor de aspectare

Sună-mă. DetectLayoutChanges după modificarea documentului pentru a recalcula metricile de amenajare înainte de păstrare:

from aspose.note import Document, Page

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

# ... add content to page ...

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

Sfaturi şi cele mai bune practici

  • Încărcătură o dată, întrebare de multe ori: Document încărcătoarea întregii .one Fişier în memorie pe Construcţie. Document Instanţă şi apel GetChildNodes mai mult decât de câteva ori. Reîncărcarea fișierului pentru fiecare întrebare.
  • Verifică. IsConflictPage: Sincronizarea OneNote poate produce pagini conflictuale. Filtrează cu: [p for p in doc if not p.IsConflictPage] înainte de prelucrarea conținutului.
  • Utilizare: LoadHistory=False (default) pentru viteză: Istoricul paginii adaugă memorie semnificativă şi Parsează peste cap. LoadHistory=True când aveți nevoie în mod explicit de date de revizuire.
  • Stream pentru fișiere mari: Treci un obiect de fişier deschis în loc de o sârmă de căi când citeşti . mare .one fişiere pentru a evita păstrarea dosarului deschis după terminarea parse.
  • Sună-mă. DetectLayoutChanges înainte de Save: Atunci când se construiește un document în mod programatic şi noduri anexate, apel DetectLayoutChanges() pentru a asigura coordonatele de amenajare sunt: în mod consecvent înainte de exportul la PDF.

Probleme comune

Numărul de dateCauzaFixare
IncorrectPasswordException în încărcareFișierul este criptat; documentele criptate nu sunt suportate.Obține o copie necriptată a fișierului
FileCorruptedException în încărcareFişier truncat sau cu un format intern neînsoţit.Verificați fișierul este un valid .one secţiunea (nu o .onetoc2 (în tabelul conținutului)
UnsupportedSaveFormatException pe salvareÎncercare de salvare într-un alt format decât PDFDoar … SaveFormat.Pdf este susținută pentru export
Eliberaţi. GetPageHistory rezultatulLoadOptions.LoadHistory nu a fost setat la: True înainte de încărcareReîncărcați documentul cu: opts.LoadHistory = True
ModuleNotFoundError: reportlabExport PDF încercat fără extra PDFFugiţi ! pip install "aspose-note[pdf]"

FAQ

Ce formate OneNote pot fi utilizate.Citește nota?

Toate cele trei formate de secțiuni OneNote: OneNote2007, OneNote2010, și OneNoteOnline. Utilizare: doc.FileFormat pentru a identifica care variantă a fost încărcată.

Pot să-i scriu înapoi unui … .one Fişier după ce l-ai citit?

Nu, îi scriu înapoi. .one nu este implementat. Export la PDF cu Document.Save este de: numai operațiunea de ieșire suportată.

Cum citesc o pagină specifică după titlu?

Iterarea pagini și comparare page.Title.TitleText.Text la șirul țintă:

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,
)

Cum număr subpaginile separat de paginile de nivel superior?

Utilizare: page.Level: nivelul 1 este cel de sus, nivelului 2 o subpagină și așa mai departe.

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)}")

Se aplică.Suport de notă .onetoc2 fişiere de conţinut?

Nu, doar… .one fişierele secţiunii sunt suportate. .onetoc2 notebook-uri va ridica FileCorruptedException.


Rezultatele de la data aplicării.

Clasa / metodaDescriere:
Document(path_or_stream, options?)Încărcare a .one fişier sau creaţi un document gol
Document.FileFormatVarianta formatului detectată (FileFormat (număr)
Document.GetChildNodes(NodeType)Obține toate nodurile descendente de un anumit tip
Document.GetPageHistory(page)Obține istoricul revizuirii pentru o pagină (requerit) LoadHistory=True)
Document.Save(target, format_or_options)Export în PDF prin cale de acces sau flux
Document.DetectLayoutChanges()Calculare de metrice după modificări programatice
Document.Accept(visitor)Mergeți pe DOM folosind un DocumentVisitor subclasa
LoadOptions.LoadHistorySetat la: True să includă revizuirile de pagini în DOM
LoadOptions.DocumentPasswordRezervat; fişiere criptate de ridicare IncorrectPasswordException
FileFormatEnum: OneNote2010, OneNoteOnline, OneNote2007, Unknown
SaveFormat.PdfSingurul format de export suportat
PageHistory.CountNumărul de revizuiri disponibile ale paginii
Page.LevelAdâncimea subpaginii (1 = nivel superior)
Page.IsConflictPageTrue pentru copiile de conflict sincronizator

Vezi și:

 Română