Prezentare generală a funcționalităților — Aspose.Note FOSS pentru Python
Aspose.Note FOSS for Python (package aspose-note, versiunea 26.3.1) oferă o API Python pentru citirea Microsoft OneNote .one fișiere de secțiune și exportarea lor în PDF. Toate funcționalitățile enumerate mai jos sunt verificate în raport cu codul sursă al depozitului, README și scripturile de exemplu.
Instalare și configurare
Instalați de pe PyPI:
pip install aspose-notePentru suportul exportului PDF (necesită ReportLab):
pip install "aspose-note[pdf]"Cerințe: Python 3.10 sau o versiune ulterioară. Nu este necesară instalarea Microsoft Office.
Funcționalități și capabilități
.Încărcarea fișierelor .one
Încarcă fișierele de secțiune Microsoft OneNote dintr-o cale de fișier sau orice flux binar (descriere de fișier, io.BytesIO, corpul răspunsului HTTP, flux de stocare în cloud).
Document.FileFormatfurnizează o indicație de tip best‑effort a versiunii formatului de fișier OneNote (OneNote2010, OneNoteOnline sau OneNote2007)- Încărcarea bazată pe flux elimină operațiile de I/O pe disc pentru fluxuri de lucru în memorie sau de rețea
LoadOptions.LoadHistoryindicatorul controlează dacă istoricul paginii este inclus în 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)Parcurgerea DOM-ului documentului
Documentul complet OneNote este expus ca un arbore de obiecte Python tipizate. Fiecare nod moștenește de la Node sau CompositeNode:
Document: rădăcină; expuneDisplayName,CreationTime,FileFormatPage: copil direct alDocument; expuneTitle,Author,CreationTime,LastModifiedTime,LevelTitle: expuneTitleText,TitleDate,TitleTime(toateRichTextnoduri)Outline: container pozițional cuHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: container frunză; expuneNumberList
Metode de navigare pe CompositeNode:
| Metodă / Proprietate | Descriere |
|---|---|
FirstChild, LastChild | Acces direct la copil |
GetChildNodes(Type) | Căutare recursivă, filtrată pe tip |
AppendChildLast(node) | Adaugă copil la sfârșit |
AppendChildFirst(node) | Adaugă un copil la început |
InsertChild(index, node) | Inserează la poziție |
RemoveChild(node) | Elimină un copil |
for child in node | Iterează copiii direcți |
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}")Extracție de conținut Rich Text
RichText nodurile expun:
Text: str: șir complet de text simpluTextRuns: list[TextRun]: listă de segmente formatateTags: list[NoteTag]: etichete OneNote atașate acestui blocAppend(text, style=None): adaugă o secvență de text în memorieReplace(old_value, new_value): substituție de șir în memorie
Fiecare TextRun conține:
| Proprietate | Tip | Descriere |
|---|---|---|
Text | str | Text segment |
Style | TextStyle | Metadate de formatare |
TextStyle proprietăți:
| Proprietate | Tip |
|---|---|
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}")Extracție de imagini
Image nodurile expun octeți brute și metadate pentru fiecare imagine încorporată:
| Proprietate | Tip | Descriere |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Date brute ale imaginii |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[NoteTag] | Etichete OneNote atașate |
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)")Extracție de fișiere atașate
AttachedFile nodurile expun atașamente de fișiere încorporate:
| Proprietate | Tip | Descriere |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Date brute ale fișierului |
Tags | list[NoteTag] | Etichete OneNote atașate |
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)Analiză de tabel
Table, TableRow, și TableCell expune structura completă a tabelului:
| Clasă | Proprietăți cheie |
|---|---|
Table | Columns: list[TableColumn] (fiecare TableColumn are .Width și .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Iterați celulele prin GetChildNodes(TableCell) |
TableCell | Conține RichText, Image, și alte noduri de conținut |
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ție etichete OneNote
NoteTag apare pe RichText, Image, AttachedFile, și Table noduri prin intermediul lor .Tags proprietate. OutlineElement nu are un .Tags proprietate. NoteTag proprietăți:
| Proprietate | Tip | Descriere |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
Metodă de fabricare: NoteTag.CreateYellowStar() creează un nod de etichetă cu stea galbenă standard.
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 pentru liste numerotate
OutlineElement.NumberList expune:
| Proprietate | Tip | Descriere |
|---|---|---|
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}")Parcurgere DocumentVisitor
DocumentVisitor furnizează un model de vizitator pentru parcurgerea structurată a documentului complet. Suprascrie orice VisitXxxStart / VisitXxxEnd metodă pentru a intercepta tipuri specifice de noduri:
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}")Export PDF
Salvează un document încărcat în PDF utilizând Document.Save(). Suportat prin backend-ul opțional ReportLab.
from aspose.note import Document, SaveFormat
doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)PdfSaveOptions
| Opțiune | Tip | Descriere |
|---|---|---|
PageIndex | int | Câmpul există; nu este transmis exportatorului PDF în v26.3.1 (nu are efect) |
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()Referință pentru Formate și Enumerații
SaveFormat
| Valoare | Stare |
|---|---|
SaveFormat.Pdf | Implementat (necesită ReportLab) |
FileFormat
Document.FileFormat furnizează o indicație de bună credință a versiunii formatului de fișier OneNote. Enumerația declară trei valori:
| Valoare | Descriere |
|---|---|
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
Limitări curente
| Limitare | Detaliu |
|---|---|
| Doar citire | Se scrie înapoi la .one formatul nu este implementat |
| Fără criptare | Documentele criptate generează IncorrectPasswordException |
| PDF doar pentru export | Altele SaveFormat Valorile generează UnsupportedSaveFormatException |
| ReportLab necesar pentru PDF | Instalare pip install "aspose-note[pdf]" separat |
GetPageHistory returnează o listă cu un singur element | Parcurgerea completă a istoricului paginii este un stub; returnează [page] |
DetectLayoutChanges() | Stub de compatibilitate; nicio operație |
Sfaturi și bune practici
- Verifică dacă este None:
Page.Title,Title.TitleText,OutlineElement.NumberList, iar majoritatea câmpurilor de metadate pot fiNone. Întotdeauna protejează cuif x is not Nonesauif xînainte de a accesa proprietățile. - Folosește
GetChildNodes(Type)pentru căutare recursivă în loc să iterezi manual arborele. Caută întregul subarbore. - Iterați copiii direcți cu
for child in nodecând aveți nevoie doar de copiii imediati. - Gestionați codificarea pe Windows: Pe Windows,
sys.stdoutpoate folosi o pagină de coduri veche. Adăugațisys.stdout.reconfigure(encoding="utf-8", errors="replace")la pornire când tipăriți text Unicode. - Instalați
[pdf]suplimentar: Nu importațiSaveFormat.Pdffuncționalitatea fără să o instalați mai întâipip install "aspose-note[pdf]". Fără ReportLab, salvarea în PDF va genera o eroare de import în timpul execuției.