Visão geral dos recursos — Aspose.Note FOSS para Python

Aspose.Note FOSS for Python (package aspose-note, version 26.3.1) fornece uma API Python para ler arquivos de seção do Microsoft OneNote .one de seção e exportá-los para PDF. Todos os recursos listados abaixo foram verificados contra o código-fonte do repositório, o README e os scripts de exemplo.

Instalação e Configuração

Instale a partir do PyPI:

pip install aspose-note

Para suporte à exportação PDF (requer ReportLab):

pip install "aspose-note[pdf]"

Requisitos: Python 3.10 ou superior. Não é necessária instalação do Microsoft Office.


Recursos e Capacidades

.Carregamento de Arquivo .one

Carregue arquivos de seção do Microsoft OneNote a partir de um caminho de arquivo ou de qualquer fluxo binário (manipulador de arquivo, io.BytesIO, corpo da resposta HTTP, fluxo de armazenamento em nuvem).

  • Document.FileFormat fornece uma indicação de melhor esforço da versão do formato de arquivo do OneNote (OneNote2010, OneNoteOnline ou OneNote2007)
  • O carregamento baseado em fluxo elimina I/O de disco para fluxos de trabalho em memória ou de rede
  • LoadOptions.LoadHistory flag controla se o histórico de páginas é incluído no DOM
from aspose.note import Document

##From a file path
doc = Document("notebook.one")

##From a binary stream
with open("notebook.one", "rb") as f:
    doc = Document(f)

Travessia do DOM do Documento

O documento completo do OneNote é exposto como uma árvore de objetos Python tipados. Cada nó herda de Node ou CompositeNode:

  • Document: raiz; expõe DisplayName, CreationTime, FileFormat
  • Page: filho direto de Document; expõe Title, Author, CreationTime, LastModifiedTime, Level
  • Title: expõe TitleText, TitleDate, TitleTime (todos RichText nós)
  • Outline: contêiner posicional com HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: contêiner folha; expõe NumberList

Métodos de navegação em CompositeNode:

Método / PropriedadeDescrição
FirstChild, LastChildAcesso direto ao filho
GetChildNodes(Type)Busca recursiva, filtrada por tipo
AppendChildLast(node)Adicionar filho ao final
AppendChildFirst(node)Adicionar filho no início
InsertChild(index, node)Inserir na posição
RemoveChild(node)Remover um filho
for child in nodeIterar filhos diretos
from aspose.note import Document, Page, Outline, OutlineElement, RichText

doc = Document("notebook.one")
for page in doc.GetChildNodes(Page):
    title_text = page.Title.TitleText.Text if page.Title and page.Title.TitleText else ""
    print(f"Page: {title_text}")
    for outline in page.GetChildNodes(Outline):
        for oe in outline.GetChildNodes(OutlineElement):
            for rt in oe.GetChildNodes(RichText):
                print(f"  {rt.Text}")

Extração de Conteúdo de Texto Rico

RichText nós expõem:

  • Text: str: string de texto simples completo
  • TextRuns: list[TextRun]: lista de segmentos formatados
  • Tags: list[NoteTag]: tags do OneNote anexadas a este bloco
  • Append(text, style=None): adicionar uma execução de texto em memória
  • Replace(old_value, new_value): substituição de string em memória

Cada TextRun contém:

PropriedadeTipoDescrição
TextstrTexto do segmento
StyleTextStyleMetadados de formatação

TextStyle propriedades:

PropriedadeTipo
IsBold, IsItalic, IsUnderline, IsStrikethroughbool
IsSuperscript, IsSubscriptbool
FontName`str
FontSize`float
FontColor, Highlight`int
Language`int
IsHyperlinkbool
HyperlinkAddress`str
from aspose.note import Document, RichText

doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.IsHyperlink:
            print(f"Hyperlink: {run.Text} -> {run.Style.HyperlinkAddress}")
        if run.Style.IsBold:
            print(f"Bold text: {run.Text}")

Extração de Imagem

Image nós expõem bytes brutos e metadados para cada imagem incorporada:

PropriedadeTipoDescrição
FileName`strNone`
BytesbytesDados brutos da imagem
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Tags do OneNote anexadas
from aspose.note import Document, Image

doc = Document("notebook.one")
for i, img in enumerate(doc.GetChildNodes(Image), start=1):
    filename = img.FileName or f"image_{i}.bin"
    with open(filename, "wb") as f:
        f.write(img.Bytes)
    print(f"Saved: {filename}  ({img.Width} x {img.Height} pts)")

Extração de Arquivo Anexado

AttachedFile nodes expõem anexos de arquivos incorporados:

PropriedadeTipoDescrição
FileName`strNone`
BytesbytesDados brutos do arquivo
Tagslist[NoteTag]Tags do OneNote anexadas
from aspose.note import Document, AttachedFile

doc = Document("notebook.one")
for i, af in enumerate(doc.GetChildNodes(AttachedFile), start=1):
    filename = af.FileName or f"attachment_{i}.bin"
    with open(filename, "wb") as f:
        f.write(af.Bytes)

Análise de Tabela

Table, TableRow, e TableCell expor a estrutura completa da tabela:

ClassePropriedades‑chave
TableColumns: list[TableColumn] (cada TableColumn tem .Width e .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowIterar células via GetChildNodes(TableCell)
TableCellContém RichText, Image, e outros nós de conteúdo
from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("notebook.one")
for table in doc.GetChildNodes(Table):
    print("Column widths:", [col.Width for col in table.Columns])
    for r, row in enumerate(table.GetChildNodes(TableRow), start=1):
        cells = row.GetChildNodes(TableCell)
        values = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in cells
        ]
        print(f"Row {r}:", values)

Inspeção de Tags do OneNote

NoteTag aparece em RichText, Image, AttachedFile, e Table nós via seus .Tags propriedade. OutlineElement não tem um .Tags propriedade. NoteTag propriedades:

PropriedadeTipoDescrição
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Método de fábrica: NoteTag.CreateYellowStar() cria um nó de tag de estrela amarela padrão.

from aspose.note import Document, RichText

doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
    for tag in rt.Tags:
        print(f"Tag: {tag.Label} (icon={tag.Icon}, completed={tag.CompletedTime})")

Suporte a Listas Numeradas

OutlineElement.NumberList expõe:

PropriedadeTipoDescrição
Format`strNone`
Restart`intNone`
from aspose.note import Document, OutlineElement

doc = Document("notebook.one")
for oe in doc.GetChildNodes(OutlineElement):
    nl = oe.NumberList
    if nl:
        print(f"format={nl.Format!r}")

Travessia com DocumentVisitor

DocumentVisitor fornece um padrão visitor para travessia estruturada de documento completo. Substitua qualquer VisitXxxStart / VisitXxxEnd método para interceptar tipos de nó específicos:

  • VisitDocumentStart(doc) / VisitDocumentEnd(doc)
  • VisitPageStart(page) / VisitPageEnd(page)
  • VisitTitleStart(title) / VisitTitleEnd(title)
  • VisitOutlineStart(outline) / VisitOutlineEnd(outline)
  • VisitOutlineElementStart(oe) / VisitOutlineElementEnd(oe)
  • VisitRichTextStart(rt) / VisitRichTextEnd(rt)
  • VisitImageStart(img) / VisitImageEnd(img)
from aspose.note import Document, DocumentVisitor, Page, RichText, Image

class MySummaryVisitor(DocumentVisitor):
    def __init__(self):
        self.pages, self.texts, self.images = 0, 0, 0

    def VisitPageStart(self, page: Page) -> None:
        self.pages += 1

    def VisitRichTextStart(self, rt: RichText) -> None:
        self.texts += 1

    def VisitImageStart(self, img: Image) -> None:
        self.images += 1

doc = Document("notebook.one")
v = MySummaryVisitor()
doc.Accept(v)
print(f"Pages={v.pages}  RichText={v.texts}  Images={v.images}")

Exportação PDF

Salvar um documento carregado em PDF usando Document.Save(). Suportado via o backend opcional ReportLab.

from aspose.note import Document, SaveFormat

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

PdfSaveOptions

OpçãoTipoDescrição
PageIndexintCampo existe; não encaminhado para o exportador PDF na v26.3.1 (não tem efeito)
PageCount`intNone`
ImageCompression`AnyNone`
JpegQuality`intNone`
PageSettings`AnyNone`
PageSplittingAlgorithm`AnyNone`
import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions

doc = Document("notebook.one")

##Save to file
doc.Save("output.pdf", SaveFormat.Pdf)

##Save to in-memory stream
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()

Referência de Formatos e Enums

SaveFormat

ValorStatus
SaveFormat.PdfImplementado (requer ReportLab)

FileFormat

Document.FileFormat fornece uma indicação de melhor esforço da versão do formato de arquivo do OneNote. O enum declara três valores:

ValorDescrição
FileFormat.OneNote2010Formato OneNote 2010
FileFormat.OneNoteOnlineFormato OneNote Online
FileFormat.OneNote2007Formato OneNote 2007

NodeType

NodeType.Document, NodeType.Page, NodeType.Outline, NodeType.OutlineElement, NodeType.RichText, NodeType.Image, NodeType.Table, NodeType.AttachedFile

HorizontalAlignment

HorizontalAlignment.Left, HorizontalAlignment.Center, HorizontalAlignment.Right


Limitações atuais

LimitaçãoDetalhe
Somente leituraGravando de volta para .one formato não está implementado
Sem criptografiaDocumentos criptografados geram IncorrectPasswordException
PDF apenas para exportaçãoOutro SaveFormat valores geram UnsupportedSaveFormatException
ReportLab necessário para PDFInstalar pip install "aspose-note[pdf]" separadamente
GetPageHistory retorna lista de um único elementoA travessia completa do histórico da página é um stub; retorna [page]
DetectLayoutChanges()Stub de compatibilidade; nenhuma operação

Dicas e Melhores Práticas

  • Verifique se é None: Page.Title, Title.TitleText, OutlineElement.NumberList, e a maioria dos campos de metadados pode ser None. Sempre proteja com if x is not None ou if x antes de acessar propriedades.
  • Use GetChildNodes(Type) para busca recursiva em vez de iterar manualmente a árvore. Ele pesquisa toda a subárvore.
  • Iterar filhos diretos com for child in node quando você só precisa de filhos imediatos.
  • Manipular codificação no Windows: No Windows, sys.stdout pode usar uma página de código legada. Adicione sys.stdout.reconfigure(encoding="utf-8", errors="replace") na inicialização ao imprimir texto Unicode.
  • Instalar [pdf] extra: Não importe SaveFormat.Pdf funcionalidade sem primeiro instalar pip install "aspose-note[pdf]". Sem o ReportLab, salvar em PDF gerará um erro de importação em tempo de execução.
 Português