Trabalhar com o documento de notas

A Comissão Document class é a raiz do Aspose.Nota para o modelo de objeto de documento Python (DOM). Cada leitura, cruzamento ou exportação operação começa com um Document instância que representa o um único .one Arquivo da secção.


Carregamento de um documento

Carregar a partir de um caminho de arquivo

Passe o caminho para um .one A Comissão Europeia Document constructor:

from aspose.note import Document

doc = Document("MyNotes.one")

Carga de um fluxo binário

Use um objeto semelhante a arquivo quando os dados vêm de uma resposta de rede, blob de armazenamento em nuvem ou buffer na memória:

from pathlib import Path
from aspose.note import Document

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

Criar um documento vazio

Construir um Document sem argumentos para criar um novo documento do OneNote programaticamente:

from aspose.note import Document, Page

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

Carga com opções

Utilização: LoadOptions Para definir parâmetros opcionais no tempo de carga:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # include page revision history in the DOM
doc = Document("MyNotes.one", opts)
LoadOptions propriedadeTipo de veículo:PadrãoDescrição:
LoadHistoryboolFalseQuando ? True, as revisões do histórico de páginas estão incluídas no DOM e acessíveis via Document.GetPageHistory
DocumentPassword`strNone`None

Detecção de formato do documento

A Comissão FileFormat Propriedade identifica qual variante do formato OneNote o ficheiro 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 deDescrição:
OneNote2010Padrão .one Arquivo escrito pelo OneNote 2010 e posteriormente
OneNoteOnline.one Arquivo escrito pelo OneNote Online / Microsoft 365
OneNote2007O legado .one formato do OneNote 2007
UnknownFormatos não identificados .

Páginas de iteração

As páginas são filhos diretos de: Document.- Usar um . for Loop para iteração simples:

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

Utilização: GetChildNodes(Page) para obter uma lista de todas as páginas digitadas ao mesmo tempo:

from aspose.note import Document, Page

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

Metadados da página

PropriedadeTipo de veículo:Descrição:
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`
IsConflictPageboolTrue se a página for uma cópia de conflito sincronizado

Atravessar a árvore de documentos

Document herda de: CompositeNode, dando-lhe métodos completos de travesso das árvores:

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

A hierarquia 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

Métodos de travessação essenciais herdados da CompositeNode:

Método de avaliaçãoDescrição:
GetChildNodes(NodeType)Devolver uma lista de todos os descendentes correspondente ao tipo dado.
AppendChildLast(node)Adicionar um nó filho no final da lista de filhos
AppendChildFirst(node)Adicionar um nó filho no início
InsertChild(index, node)Insira uma criança num índice específico.
RemoveChild(node)Remover um nó filho
GetEnumerator()Iterar filhos diretos

Histórico da página

Quando carregado com LoadHistory=True, Document.GetPageHistory Retorna todas as revisões salvas de uma página, ordenada do mais antigo ao mais recente:

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 Retorna um vazio. PageHistory objecto quando LoadHistory é: False (o padrão). opts.LoadHistory = True antes de carregar se precisar. dados de revisão.


A poupança e a exportação

Utilização: Document.Save PDF é o único formato de exportação suportado.

Salvar para um ficheiro

from aspose.note import Document, SaveFormat

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

Salvar para um fluxo de memória

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 com opções

Utilização: PdfSaveOptions (de aspose.note.saving) para controlar a selecção de páginas:

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

Importância: A exportação de PDF requer a dependência opcional ReportLab. Instala-o com: pip install "aspose-note[pdf]".


Detecção de alterações na configuração

Chama-me . DetectLayoutChanges Após a modificação do documento para recalcular as métricas de layout antes de guardar:

from aspose.note import Document, Page

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

# ... add content to page ...

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

Dicas e melhores práticas

  • Carregar uma vez, consultar muitas vezes: Document carrega o conjunto de .one Arquivo na memória em: - Construção. Document instância e chamada GetChildNodes mais repetidamente do que Recarregar o ficheiro para cada consulta.
  • Verificação IsConflictPage: A sincronização do OneNote pode produzir páginas em conflito. Filtrar com [p for p in doc if not p.IsConflictPage] antes de processar o conteúdo.
  • Utilização: LoadHistory=False (default) para velocidade: Histórico de página acrescenta memória significativa e Só definido. LoadHistory=True quando precisam de dados de revisão.
  • Fluxo para arquivos grandes: Passe um objeto de arquivo aberto em vez de uma cadeia de traços ao ler . grande .one Arquivos para evitar manter o arquivo aberto depois que a análise é concluída.
  • Chama-me . DetectLayoutChanges antes de Save: Ao construir um documento de forma programática e nós anexados, chamada DetectLayoutChanges() para assegurar que as coordenadas de traçado são: consistente antes da exportação para o PDF.

Problemas comuns

EmissãoCausa da morteCorreção
IncorrectPasswordException em cargaO ficheiro está encriptado; documentos criptografados não são suportados.Obter uma cópia não criptografada do arquivo
FileCorruptedException em cargaO ficheiro é truncado ou tem um formato interno não suportado .Verificar que o ficheiro é válido . .one secção (não um .onetoc2 (Tabela de conteúdos)
UnsupportedSaveFormatException em salvaçãoTentativa de salvar em outro formato que não o PDF.Apenas: SaveFormat.Pdf é apoiado para exportação.
Vazio. - Não . GetPageHistory resultadoLoadOptions.LoadHistory não foi definido para: True antes do carregamentoRecarregar o documento com: opts.LoadHistory = True
ModuleNotFoundError: reportlabTentativa de exportação PDF sem o extra do PDFCorra . pip install "aspose-note[pdf]"

FAQ

Que formatos do OneNote podem ser utilizados.Ler nota?

Todos os três formatos de secção do OneNote: OneNote2007, OneNote2010, e OneNoteOnline. Utilização: doc.FileFormat Identificar qual variante foi carregada.

Posso responder a uma … .one Arquivo depois de o ler?

Não, estou a escrever para o meu amigo. .one Não está implementado. Exportar para PDF com Document.Save é o apenas operação de saída suportada.

Como leio uma página específica pelo título?

Iterar páginas e comparar page.Title.TitleText.Text para a sua cadeia de alvo:

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

Como posso contar subpáginas separadamente das páginas de nível superior?

Utilização: page.Level: o nível 1 é um nível superior, o nivel 2 uma subpágina e assim por diante.

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

Acompanhe o pedido de autorização.Nota de apoio .onetoc2 Arquivos de tabela dos conteúdos?

Não, só… .one Os ficheiros de secção são suportados. .onetoc2 Os cadernos vão aumentar. FileCorruptedException.


Resumo de referência da API

Classe / MétodoDescrição:
Document(path_or_stream, options?)Carregamento a .one arquivo ou criar um documento vazio
Document.FileFormatVariante de formato detectada (FileFormat (em inglês)
Document.GetChildNodes(NodeType)Obter todos os nós descendentes de um tipo dado
Document.GetPageHistory(page)Obter o histórico de revisões para uma página (requer) LoadHistory=True)
Document.Save(target, format_or_options)Exportação para PDF por caminho de arquivo ou fluxo
Document.DetectLayoutChanges()Recalcular métricas de layout após edições programáticas
Document.Accept(visitor)Caminhar o DOM usando um DocumentVisitor Subclasse
LoadOptions.LoadHistoryConfiguração: True incluir revisões de páginas no DOM
LoadOptions.DocumentPasswordReservado; arquivos criptografados levantam IncorrectPasswordException
FileFormatEnum: OneNote2010, OneNoteOnline, OneNote2007, Unknown
SaveFormat.PdfÚnico formato de exportação suportado
PageHistory.CountNúmero de revisões disponíveis da página
Page.LevelProfundidade de subpágina (1 = nível superior)
Page.IsConflictPageTrue para cópias de conflito de sincronização

Ver também:

 Português