Visió general de les funcionalitats — Aspose.Note FOSS per a Python

Aspose.Note FOSS for Python (package aspose-note, versió 26.3.1) proporciona una API Python per llegir Microsoft OneNote .one fitxers de secció i exportar-los a PDF. Totes les funcionalitats enumerades a continuació s’han verificat contra el codi font del repositori, el README i els scripts d’exemple.

Instal·lació i configuració

Instal·la des de PyPI:

pip install aspose-note

Per al suport d’exportació a PDF (requereix ReportLab):

pip install "aspose-note[pdf]"

Requisits: Python 3.10 o posterior. No es requereix instal·lació de Microsoft Office.


Funcionalitats i capacitats

.Càrrega de fitxers .one

Carrega fitxers de secció de Microsoft OneNote des d’un camí de fitxer o qualsevol flux binari (manejador de fitxer, io.BytesIO, cos de resposta HTTP, flux d’emmagatzematge al núvol).

  • Document.FileFormat proporciona una indicació de millor esforç de la versió del format de fitxer OneNote (OneNote2010, OneNoteOnline o OneNote2007)
  • La càrrega basada en flux elimina les operacions d’E/S de disc per a fluxos de treball en memòria o de xarxa
  • LoadOptions.LoadHistory el senyal controla si l’historial de pàgines s’inclou al 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)

Recórrer el DOM del document

El document complet de OneNote s’exposa com un arbre d’objectes Python tipats. Cada node hereta de Node o CompositeNode:

  • Document: arrel; exposa DisplayName, CreationTime, FileFormat
  • Page: fill directe de Document; exposa Title, Author, CreationTime, LastModifiedTime, Level
  • Title: exposa TitleText, TitleDate, TitleTime (tots RichText nodes)
  • Outline: contenidor posicional amb HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: contenidor fulla; exposa NumberList

Mètodes de navegació a CompositeNode:

Mètode / PropietatDescripció
FirstChild, LastChildAccés directe al fill
GetChildNodes(Type)Cerca recursiva, filtrada per tipus
AppendChildLast(node)Afegeix fill al final
AppendChildFirst(node)Afegeix un fill al principi
InsertChild(index, node)Insereix a la posició
RemoveChild(node)Elimina un fill
for child in nodeItera els fills directes
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}")

Extracció de contingut de text enriquit

RichText nodes exposen:

  • Text: str: cadena de text pla completa
  • TextRuns: list[TextRun]: llista de segments formatats
  • Tags: list[NoteTag]: etiquetes OneNote adjuntes a aquest bloc
  • Append(text, style=None): afegeix una execució de text en memòria
  • Replace(old_value, new_value): substitució de cadena en memòria

Cada TextRun conté:

PropietatTipusDescripció
TextstrText del segment
StyleTextStyleMetadades de format

TextStyle propietats:

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

Extracció d’imatges

Image els nodes exposen bytes en brut i metadades per a cada imatge incrustada:

PropietatTipusDescripció
FileName`strNone`
BytesbytesDades d’imatge en brut
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Etiquetes OneNote adjuntes
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)")

Extracció de fitxers adjunts

AttachedFile nodes exposen fitxers adjunts incrustats:

PropietatTipusDescripció
FileName`strNone`
BytesbytesDades brutes del fitxer
Tagslist[NoteTag]Etiquetes OneNote adjuntes
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àlisi de taules

Table, TableRow, i TableCell exposa l’estructura completa de la taula:

ClassePropietats clau
TableColumns: list[TableColumn] (cadascú TableColumn.Width i .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowItera cel·les mitjançant GetChildNodes(TableCell)
TableCellConté RichText, Image, i altres nodes de contingut
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)

Inspecció d’etiquetes de OneNote

NoteTag apareix a RichText, Image, AttachedFile, i Table nodes mitjançant el seu .Tags propietat. OutlineElement no té un .Tags propietat. NoteTag propietats:

PropietatTipusDescripció
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Mètode de fàbrica: NoteTag.CreateYellowStar() crea un node d’etiqueta d’estrella groga estàndard.

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

Suport per a llistes numerades

OutlineElement.NumberList exposa:

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

Recórrer amb DocumentVisitor

DocumentVisitor proporciona un patró de visitador per a un recorregut estructurat de tot el document. Sobreescriu qualsevol VisitXxxStart / VisitXxxEnd mètode per interceptar tipus de node específics:

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

Exportació PDF

Desa un document carregat a PDF utilitzant Document.Save(). Suportat a través del backend opcional ReportLab.

from aspose.note import Document, SaveFormat

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

PdfSaveOptions

OpcióTipusDescripció
PageIndexintEl camp existeix; no s’envia a l’exportador PDF a la versió v26.3.1 (no té cap efecte)
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 formats i enums

SaveFormat

ValorEstat
SaveFormat.PdfImplementat (requereix ReportLab)

FileFormat

Document.FileFormat Proporciona una indicació de millor esforç de la versió del format de fitxer OneNote. L’enumeració declara tres valors:

ValorDescripció
FileFormat.OneNote2010Format OneNote 2010
FileFormat.OneNoteOnlineFormat OneNote Online
FileFormat.OneNote2007Format 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


Limitacions actuals

LimitacióDetall
Només lecturaEscrivint de nou a .one el format no està implementat
Sense xifratgeEls documents xifrats provoquen IncorrectPasswordException
PDF només per exportacióAltres SaveFormat els valors provoquen UnsupportedSaveFormatException
Cal ReportLab per a PDFInstal·lar pip install "aspose-note[pdf]" separadament
GetPageHistory retorna una llista d’un sol elementEl recorregut complet de l’historial de la pàgina és un stub; retorna [page]
DetectLayoutChanges()Stub de compatibilitat; cap operació

Consells i bones pràctiques

  • Comprova si és None: Page.Title, Title.TitleText, OutlineElement.NumberList, i la majoria dels camps de metadades poden ser None. Sempre protegeix amb if x is not None o if x abans d’accedir a les propietats.
  • Utilitza GetChildNodes(Type) per a una cerca recursiva en lloc d’iterar manualment l’arbre. Cerca tot el subarbre.
  • Itera fills directes amb for child in node quan només necessites fills immediats.
  • Gestiona la codificació a Windows: A Windows, sys.stdout pot utilitzar una pàgina de codis antiga. Afegeix sys.stdout.reconfigure(encoding="utf-8", errors="replace") a l’inici quan imprimeixes text Unicode.
  • Instal·la [pdf] addicional: No importis SaveFormat.Pdf funcionalitat sense instal·lar-la primer pip install "aspose-note[pdf]". Sense ReportLab, desar a PDF generarà un error d’importació en temps d’execució.
 Català