Trabajar con el documento de nota

Este guía explica cómo cargar, cruzar y exportar Microsoft OneNote .one Los archivos en Python utilizan el Document de la clase de Aspose.Note FOSS. The Document La clase es la raíz del modelo de objeto de documento (DOM), y cada operación de lectura, cruzamiento o exportación comienza con una Document El caso que representa un único .one El archivo de la sección.


Cargar un documento

Cargar desde una ruta de archivo

Pasemos el camino a la .one archivo directamente a la Document El constructor:

from aspose.note import Document

doc = Document("MyNotes.one")

Cargar desde un flujo binario

Utilice un objeto similar al archivo cuando los datos provienen de una respuesta de red, bloque de almacenamiento en la nube o buffer en memoria:

from pathlib import Path
from aspose.note import Document

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

Crea un documento vacío

Construye a Document No hay argumentos para crear un nuevo documento de OneNote programado:

from aspose.note import Document, Page

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

Cargar con opciones

Uso LoadOptions Para establecer parámetros opcionales como la historia de carga en el tiempo de construcción:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # include page revision history in the DOM
doc = Document("MyNotes.one", opts)
LoadOptions PropiedadTipoDefiniciónDescripción
LoadHistoryboolFalseCuando True, las revisións de la historia de página están incluidas en el DOM y accesibles a través del Document.GetPageHistory
DocumentPassword`strNone`None

Detección de documentos formatos

El FileFormat La propiedad identifica qué variante de formato OneNote el archivo utiliza:

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 ValorDescripción
OneNote2010estándar .one archivos escritos por OneNote 2010 y posteriores
OneNoteOnline.one Archivo escrito por OneNote Online / Microsoft 365
OneNote2007herencia .one El formato de OneNote 2007
UnknownEl formato no se puede identificar.

Iteración de Páginas

Las páginas son los niños directos de Document.Utilice a for El uso de la iteración simple:

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

Uso GetChildNodes(Page) Para obtener una lista de todas las páginas al mismo tiempo:

from aspose.note import Document, Page

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

Metadatos de página

PropiedadTipoDescripción
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`
IsConflictPageboolTrue Si la página es una copia de conflicto de sincronización

Viaje por el árbol de documentos

Document heredados de CompositeNode, dando a ella los métodos de la trama completa:

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

La hierarquía de los domos:

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

Los métodos cruciales heredados de los CompositeNode:

MetodologíaDescripción
GetChildNodes(NodeType)Retorno de una lista tipada de todos los descendientes que coincidan con el tipo dado
AppendChildLast(node)Añadir un nodo infantil al final de la lista de niños
AppendChildFirst(node)Añadir un nodo infantil al principio
InsertChild(index, node)Insertar a un niño en un índice específico
RemoveChild(node)Removemos un nodo infantil
GetEnumerator()Iterate los niños directos

Historia de la página

Cuando se carga con LoadHistory=True, Document.GetPageHistory devolver todas las revisiones salvas de una página, ordenada desde la más antigua hasta la última:

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

Nota: GetPageHistory Devolver un vacío PageHistory Objeto cuando LoadHistory Es el False (default) siempre establecido opts.LoadHistory = True Antes de cargar si necesitas Datos de revisión.


Ahorro y exportación

Uso Document.Save PDF es el único formato de exportación que se apoya.

Salva en un archivo

llamadas Document.Save() con un archivo de ruta y SaveFormat.Pdf Para escribir la exportación directamente al disco:

from aspose.note import Document, SaveFormat

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

Salva a un flujo de memoria

Pasar un escrito io.BytesIO buffer en lugar de un camino para capturar los bytes PDF en la memoria:

import io
from aspose.note import Document, SaveFormat

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

Salvar con opciones

Uso PdfSaveOptions de aspose.note.saving Para controlar qué páginas están incluidas en la salida de PDF exportada:

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

Importante: Exportación de PDF requiere la dependencia opcional ReportLab. Instalarlo con pip install "aspose-note[pdf]".


Detectar los cambios en el layout

llamadas DetectLayoutChanges después de modificar el documento para recalcular las metrinas de layout Antes de ahorrar:

from aspose.note import Document, Page

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

# ... add content to page ...

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

Consejos y mejores prácticas

  • Cargar una vez, preguntar muchas veces: Document Carga todo el .one El archivo en memoria El trabajo. mantenga uno Document Instancia y llamado GetChildNodes Repetir más que Recargar el archivo para cada consulta.
  • Verificar IsConflictPage: OneNote puede sincronizar páginas de conflicto. [p for p in doc if not p.IsConflictPage] Antes de procesar el contenido.
  • Uso LoadHistory=False (default) para la velocidad: Historia de la página añade memoria significativa y Cortesía: sólo se establece LoadHistory=True Cuando necesitas datos de revisión.
  • Flujo para grandes archivos: Pasar un objeto de archivo abierto en lugar de una línea de ruta al leer Gran .one Los archivos para evitar mantener el archivo abierto después de que la parsa se complete.
  • llamadas DetectLayoutChanges Antes de Save:Cuando se crea un documento programado y apendendo los nodos, llame DetectLayoutChanges() Para que las coordenadas de la distribución sean Consistente antes de exportar a PDF.

Problemas comunes

ProblemasCausasFixado
IncorrectPasswordException En cargaEl archivo está encriptado; los documentos encriptidos no se soportan.Obtener una copia no cifrada del archivo
FileCorruptedException En cargaEl archivo está truncado o tiene un formato interno no soportado.Verificar el archivo es válido .one La sección (no a .onetoc2 Taller de contenidos)
UnsupportedSaveFormatException En el salvamentoIntentado para guardar en un formato diferente a PDFSólo el formato PDF se soporta para la exportación.
vacío GetPageHistory ResultadoLoadOptions.LoadHistory No se estableció para True Antes de cargarRecargar el documento con opts.LoadHistory = True
ModuleNotFoundError: reportlabPDF exportación intentado sin el PDF extraCorrida pip install "aspose-note[pdf]"

FAQ

¿Qué formatos de OneNote puede leer Aspose.Notes?

Todos los tres formatos de la sección OneNote: OneNote2007, OneNote2010,y, OneNoteOnline. Uso doc.FileFormat Identificar qué variante se cargó.

Puedo volver a escribir en una .one ¿El archivo después de leerlo?

Aspose.Note for Python is a read-and-export library. Use Document.Save El formato binario de OneNote se lee únicamente en esta edición FOSS.

¿Cómo puedo leer una página por título?

Iterate páginas con una expresión de generador y comparar la propiedad del texto de título a su rama de destino:

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

¿Cómo puedo contar subpáginas separadamente de las páginas de alto nivel?

Uso page.Level:El nivel 1 es el nivel superior, el 2 es una subpágina y así sucesivamente.

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

¿Suporte a Aspose.Note? .onetoc2 ¿Files de contenido?

No. Sólo .one Se soportan los archivos de sección. .onetoc2 Los notas aumentarán FileCorruptedException.


Sumación de referencia API

Clase / MétodoDescripción
Document(path_or_stream, options?)Carga a .one archivo o crear un documento vacío
Document.FileFormatEl formato de la variante (FileFormat Enum)
Document.GetChildNodes(NodeType)Retirar todos los nodos descendentes de un tipo dado
Document.GetPageHistory(page)Obtener historial de revisión para una página (requisitos) LoadHistory=True)
Document.Save(target, format_or_options)Exportación a PDF por ruta de archivo o flujo
Document.DetectLayoutChanges()Recalcular las metrinas de layout después de editar programas
Document.Accept(visitor)El camino de la casa con un DocumentVisitor Subclases
LoadOptions.LoadHistorySete a True Para incluir revisiones de páginas en el DOM
LoadOptions.DocumentPasswordReserva; archivos encriptados se elevan IncorrectPasswordException
FileFormatEn el: OneNote2010, OneNoteOnline, OneNote2007, Unknown
SaveFormat.PdfEl único formato de exportación apoyado; aumentan los niveles ValueError Para otros formatos
PageHistory.CountNúmero de revisións disponibles
Page.LevelDuración de la subpágina (1 = nivel superior)
Page.IsConflictPageTrue para copias de conflicto sincronizado

Ver también

 Español