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-notePara 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.FileFormatfornece 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.LoadHistoryflag 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õeDisplayName,CreationTime,FileFormatPage: filho direto deDocument; expõeTitle,Author,CreationTime,LastModifiedTime,LevelTitle: expõeTitleText,TitleDate,TitleTime(todosRichTextnós)Outline: contêiner posicional comHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: contêiner folha; expõeNumberList
Métodos de navegação em CompositeNode:
| Método / Propriedade | Descrição |
|---|---|
FirstChild, LastChild | Acesso 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 node | Iterar 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 completoTextRuns: list[TextRun]: lista de segmentos formatadosTags: list[NoteTag]: tags do OneNote anexadas a este blocoAppend(text, style=None): adicionar uma execução de texto em memóriaReplace(old_value, new_value): substituição de string em memória
Cada TextRun contém:
| Propriedade | Tipo | Descrição |
|---|---|---|
Text | str | Texto do segmento |
Style | TextStyle | Metadados de formatação |
TextStyle propriedades:
| Propriedade | Tipo |
|---|---|
IsBold, IsItalic, IsUnderline, IsStrikethrough | bool |
IsSuperscript, IsSubscript | bool |
FontName | `str |
FontSize | `float |
FontColor, Highlight | `int |
Language | `int |
IsHyperlink | bool |
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:
| Propriedade | Tipo | Descrição |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Dados brutos da imagem |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[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:
| Propriedade | Tipo | Descrição |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Dados brutos do arquivo |
Tags | list[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:
| Classe | Propriedades‑chave |
|---|---|
Table | Columns: list[TableColumn] (cada TableColumn tem .Width e .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Iterar células via GetChildNodes(TableCell) |
TableCell | Conté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:
| Propriedade | Tipo | Descrição |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
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:
| Propriedade | Tipo | Descrição |
|---|---|---|
Format | `str | None` |
Restart | `int | None` |
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ção | Tipo | Descrição |
|---|---|---|
PageIndex | int | Campo existe; não encaminhado para o exportador PDF na v26.3.1 (não tem efeito) |
PageCount | `int | None` |
ImageCompression | `Any | None` |
JpegQuality | `int | None` |
PageSettings | `Any | None` |
PageSplittingAlgorithm | `Any | None` |
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
| Valor | Status |
|---|---|
SaveFormat.Pdf | Implementado (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:
| Valor | Descrição |
|---|---|
FileFormat.OneNote2010 | Formato OneNote 2010 |
FileFormat.OneNoteOnline | Formato OneNote Online |
FileFormat.OneNote2007 | Formato 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ção | Detalhe |
|---|---|
| Somente leitura | Gravando de volta para .one formato não está implementado |
| Sem criptografia | Documentos criptografados geram IncorrectPasswordException |
| PDF apenas para exportação | Outro SaveFormat valores geram UnsupportedSaveFormatException |
| ReportLab necessário para PDF | Instalar pip install "aspose-note[pdf]" separadamente |
GetPageHistory retorna lista de um único elemento | A 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 serNone. Sempre proteja comif x is not Noneouif xantes 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 nodequando você só precisa de filhos imediatos. - Manipular codificação no Windows: No Windows,
sys.stdoutpode usar uma página de código legada. Adicionesys.stdout.reconfigure(encoding="utf-8", errors="replace")na inicialização ao imprimir texto Unicode. - Instalar
[pdf]extra: Não importeSaveFormat.Pdffuncionalidade sem primeiro instalarpip install "aspose-note[pdf]". Sem o ReportLab, salvar em PDF gerará um erro de importação em tempo de execução.