Descrição geral Aspose.Note FOSS para Python

Aspose.Note FOSS for Python (package aspose-note, versão 26.3.2) fornece uma API Python para leitura do Microsoft OneNote . .one Todos os recursos listados abaixo são verificados contra o código fonte do repositório, README e scripts de exemplo.

Instalação e configuração

Instalar a partir do PyPI:

pip install aspose-note

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

pip install aspose-note

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


Características e capacidades

.one Carregamento de ficheiro

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

  • Document.FileFormat fornece uma indicação de melhor esforço da versão do formato de arquivo OneNote (OneNo te2010, One No teOnline ou One Note 2007),
  • Carregamento baseado em fluxo elimina I/O de disco para fluxos de trabalho na memória ou rede
  • LoadOptions.LoadHistory Controlo de sinalização se o histórico da página está 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)

Documentos DOM de travessia

O documento completo do OneNote é exposto como uma árvore de objetos Python tipados. Cada nó herda da base de dados e o código-fonto, que são os elementos que compõem a base. Node ou a) CompositeNode:

  • Document:Rótulo; expõe DisplayName, CreationTime, FileFormat
  • Page: filho direto de: Document;expõe; Title, Author, CreationTime, LastModifiedTime, Level
  • Title: expõe TitleText, TitleDate, TitleTime (todos os produtos) RichText Números de dados (nodes)
  • Outline: recipiente posicional com: HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: recipiente de folhas; exposições NumberList

Métodos de navegação em CompositeNode:

Método / PropriedadeDescrição:
FirstChild, LastChildAcesso direto de crianças
GetChildNodes(Type)Pesquisa recorrente, filtrada por tipo de texto
AppendChildLast(node)Adicionar criança no final
AppendChildFirst(node)Adicionar criança no início
InsertChild(index, node)Insiração em posição
RemoveChild(node)Remova uma criança.
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 em texto rico

RichText Os nós expõem:

  • Text: str: cadeia de texto simples completa
  • TextRuns: list[TextRun]: lista de segmentos formatados
  • Tags: list[NoteTag]:Tags do OneNote anexados a este bloco
  • Append(text, style=None): adicionar um texto executado na memória
  • Replace(old_value, new_value):Substituição de cadeias na memória:

Cada um. TextRun que contém:

PropriedadeTipo de veículo:Descrição:
TextstrTexto do segmento
StyleTextStyleFormatação de metadados

TextStyle propriedades:

PropriedadeTipo de veículo:
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 Os nós expõem bytes e metadados brutos para cada imagem incorporada:

PropriedadeTipo de veículo:Descrição:
FileName`strNone`
BytesbytesDados de imagem em bruto
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Tags do OneNote anexados
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 arquivos anexados

AttachedFile Os nós expõem os anexos de ficheiros incorporados:

PropriedadeTipo de veículo:Descrição:
FileName`strNone`
BytesbytesDados dos ficheiros brutos
Tagslist[NoteTag]Tags do OneNote anexados
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:Principais propriedades
TableColumns: list[TableColumn] (cada um) TableColumn tem .Width e a) .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowCelas iteradas 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)

Inspecção de etiquetas do OneNote

NoteTag Aparece em: RichText, Image, AttachedFile, e Table Os nódulos via sua .Tags propriedade. OutlineElement não tem um .Tags propriedade. NoteTag propriedades:

PropriedadeTipo de veículo:Descrição:
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

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

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 de lista numerada

OutlineElement.NumberList expõe:

PropriedadeTipo de veículo:Descriçã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}")

DocumentVisitor Traversal (Documento)

DocumentVisitor fornece um padrão de visitante para a navegação estruturada do documento completo. VisitXxxStart / VisitXxxEnd método para interceptar tipos específicos de nós:

  • 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 para PDF usando: Document.Save().Suportado através do backend opcional ReportLab.

from aspose.note import Document, SaveFormat

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

PdfSaveOptions

Opção:Tipo de veículo:Descrição:
PageIndexintÍndice baseado em zero da primeira página a ser exportada (padrão: 0, primeira pagina)
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()

Formatos e referências do Enum

SaveFormat

Valor de um produtoEstatuto da União Europeia
SaveFormat.PdfImplementado através do ReportLab; aumenta o valor de cada um dos créditos. ValueError se o manipulador de formato não estiver registado

FileFormat

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

Valor de um produtoDescrição:
FileFormat.OneNote2010Formatos do OneNote 2010
FileFormat.OneNoteOnlineFormato OneNote Online
FileFormat.OneNote2007Formato do 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 actuais

LimitaçãoDetalhes
Apenas leituraA escrever de volta para: .one formato não está implementado
Sem criptografia .Documentos criptografados levantam IncorrectPasswordException
PDF apenas para exportaçãoOutros produtos de base SaveFormat valores de aumento UnsupportedSaveFormatException
Requerido para PDF ReportLabInstalar pip install "aspose-note[pdf]" separadamente
GetPageHistory Retorna lista de um único elementoA travessa completa do histórico da página é um estúdio; retorna [page]
DetectLayoutChanges()Estudo de compatibilidade; não operação

Dicas e melhores práticas

  • Verificar para Nenhum: Page.Title, Title.TitleText, OutlineElement.NumberList, e a maioria dos campos de metadados pode ser None.- Sempre a vigiar com o meu amigo . if x is not None ou a) if x antes de aceder a propriedades.
  • Utilização: GetChildNodes(Type) Ele busca toda a sub-árvore.
  • Iterar filhos diretos com: for child in node quando só precisas de filhos imediatos.
  • Manusear a codificação no Windows:Em Windows, sys.stdout Pode usar uma página de código legado. Adicionar sys.stdout.reconfigure(encoding="utf-8", errors="replace") no início da impressão de texto Unicode.
  • Instalar [pdf] extra: Exportação PDF requer ReportLab. Run pip install "aspose-note[pdf]" antes de utilizar: SaveFormat.Pdf.Sem o ReportLab, a salvação para PDF aumenta um valor de R$ 10 milhões. ImportError no momento da execução.

Ver também:

 Português