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-notePer 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.FileFormatproporciona 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.LoadHistoryel 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; exposaDisplayName,CreationTime,FileFormatPage: fill directe deDocument; exposaTitle,Author,CreationTime,LastModifiedTime,LevelTitle: exposaTitleText,TitleDate,TitleTime(totsRichTextnodes)Outline: contenidor posicional ambHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: contenidor fulla; exposaNumberList
Mètodes de navegació a CompositeNode:
| Mètode / Propietat | Descripció |
|---|---|
FirstChild, LastChild | Accé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 node | Itera 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 completaTextRuns: list[TextRun]: llista de segments formatatsTags: list[NoteTag]: etiquetes OneNote adjuntes a aquest blocAppend(text, style=None): afegeix una execució de text en memòriaReplace(old_value, new_value): substitució de cadena en memòria
Cada TextRun conté:
| Propietat | Tipus | Descripció |
|---|---|---|
Text | str | Text del segment |
Style | TextStyle | Metadades de format |
TextStyle propietats:
| Propietat | Tipus |
|---|---|
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}")Extracció d’imatges
Image els nodes exposen bytes en brut i metadades per a cada imatge incrustada:
| Propietat | Tipus | Descripció |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Dades d’imatge en brut |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[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:
| Propietat | Tipus | Descripció |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Dades brutes del fitxer |
Tags | list[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:
| Classe | Propietats clau |
|---|---|
Table | Columns: list[TableColumn] (cadascú TableColumn té .Width i .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Itera cel·les mitjançant GetChildNodes(TableCell) |
TableCell | Conté 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:
| Propietat | Tipus | Descripció |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
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:
| Propietat | Tipus | Descripció |
|---|---|---|
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}")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ó | Tipus | Descripció |
|---|---|---|
PageIndex | int | El camp existeix; no s’envia a l’exportador PDF a la versió v26.3.1 (no té cap efecte) |
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 formats i enums
SaveFormat
| Valor | Estat |
|---|---|
SaveFormat.Pdf | Implementat (requereix ReportLab) |
FileFormat
Document.FileFormat Proporciona una indicació de millor esforç de la versió del format de fitxer OneNote. L’enumeració declara tres valors:
| Valor | Descripció |
|---|---|
FileFormat.OneNote2010 | Format OneNote 2010 |
FileFormat.OneNoteOnline | Format OneNote Online |
FileFormat.OneNote2007 | Format 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 lectura | Escrivint de nou a .one el format no està implementat |
| Sense xifratge | Els documents xifrats provoquen IncorrectPasswordException |
| PDF només per exportació | Altres SaveFormat els valors provoquen UnsupportedSaveFormatException |
| Cal ReportLab per a PDF | Instal·lar pip install "aspose-note[pdf]" separadament |
GetPageHistory retorna una llista d’un sol element | El 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 serNone. Sempre protegeix ambif x is not Noneoif xabans 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 nodequan només necessites fills immediats. - Gestiona la codificació a Windows: A Windows,
sys.stdoutpot utilitzar una pàgina de codis antiga. Afegeixsys.stdout.reconfigure(encoding="utf-8", errors="replace")a l’inici quan imprimeixes text Unicode. - Instal·la
[pdf]addicional: No importisSaveFormat.Pdffuncionalitat sense instal·lar-la primerpip install "aspose-note[pdf]". Sense ReportLab, desar a PDF generarà un error d’importació en temps d’execució.