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 Propiedad | Tipo | Definición | Descripción |
|---|---|---|---|
LoadHistory | bool | False | Cuando 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 | `str | None` | 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 Valor | Descripción |
|---|---|
OneNote2010 | estándar .one archivos escritos por OneNote 2010 y posteriores |
OneNoteOnline | .one Archivo escrito por OneNote Online / Microsoft 365 |
OneNote2007 | herencia .one El formato de OneNote 2007 |
Unknown | El 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
| Propiedad | Tipo | Descripción |
|---|---|---|
Title | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
IsConflictPage | bool | True 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
└── AttachedFileLos métodos cruciales heredados de los CompositeNode:
| Metodología | Descripció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:
GetPageHistoryDevolver un vacíoPageHistoryObjeto cuandoLoadHistoryEs elFalse(default) siempre establecidoopts.LoadHistory = TrueAntes 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:
DocumentCarga todo el.oneEl archivo en memoria El trabajo. mantenga unoDocumentInstancia y llamadoGetChildNodesRepetir 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 estableceLoadHistory=TrueCuando 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
.oneLos archivos para evitar mantener el archivo abierto después de que la parsa se complete. - llamadas
DetectLayoutChangesAntes deSave:Cuando se crea un documento programado y apendendo los nodos, llameDetectLayoutChanges()Para que las coordenadas de la distribución sean Consistente antes de exportar a PDF.
Problemas comunes
| Problemas | Causas | Fixado |
|---|---|---|
IncorrectPasswordException En carga | El archivo está encriptado; los documentos encriptidos no se soportan. | Obtener una copia no cifrada del archivo |
FileCorruptedException En carga | El 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 salvamento | Intentado para guardar en un formato diferente a PDF | Sólo el formato PDF se soporta para la exportación. |
vacío GetPageHistory Resultado | LoadOptions.LoadHistory No se estableció para True Antes de cargar | Recargar el documento con opts.LoadHistory = True |
ModuleNotFoundError: reportlab | PDF exportación intentado sin el PDF extra | Corrida 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étodo | Descripción |
|---|---|
Document(path_or_stream, options?) | Carga a .one archivo o crear un documento vacío |
Document.FileFormat | El 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.LoadHistory | Sete a True Para incluir revisiones de páginas en el DOM |
LoadOptions.DocumentPassword | Reserva; archivos encriptados se elevan IncorrectPasswordException |
FileFormat | En el: OneNote2010, OneNoteOnline, OneNote2007, Unknown |
SaveFormat.Pdf | El único formato de exportación apoyado; aumentan los niveles ValueError Para otros formatos |
PageHistory.Count | Número de revisións disponibles |
Page.Level | Duración de la subpágina (1 = nivel superior) |
Page.IsConflictPage | True para copias de conflicto sincronizado |
Ver también
- Extracción de texto: extraer texto plano y runs formatos
- PDF Exportación: opciones de exportación, selección de página y salida de flujo
- Imágenes y Atacimientos: extraer imágenes envueltas y archivos anexados
- Mesa de: estructura de la mesa parsing y contenido celular
- Etiquetas: API Documentos
- Aspose.Note — Enterprise Documentation