Prehľad funkcií — Aspose.Note FOSS pre Python
Aspose.Note FOSS for Python (package aspose-note, version 26.3.1) poskytuje Python API pre čítanie Microsoft OneNote .one súborov sekcií a ich exportovanie do PDF. Všetky nižšie uvedené funkcie sú overené proti zdrojovému kódu repozitára, README a ukážkovým skriptom.
Inštalácia a nastavenie
Inštalácia z PyPI:
pip install aspose-notePre podporu exportu do PDF (vyžaduje ReportLab):
pip install "aspose-note[pdf]"Požiadavky: Python 3.10 alebo novší. Nie je potrebná inštalácia Microsoft Office.
Funkcie a možnosti
.Načítanie súborov .one
Načítajte súbory sekcií Microsoft OneNote z cesty k súboru alebo akéhokoľvek binárneho prúdu (súborový handle, io.BytesIO, telo HTTP odpovede, prúd cloud úložiska).
Document.FileFormatposkytuje najlepší možný odhad verzie formátu súboru OneNote (OneNote2010, OneNoteOnline alebo OneNote2007)- Načítanie založené na prúde eliminuje diskové I/O pre pracovné postupy v pamäti alebo cez sieť
LoadOptions.LoadHistoryflag určuje, či je história stránok zahrnutá v 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)Prechádzanie DOM dokumentu
Celý dokument OneNote je vystavený ako strom typovaných Python objektov. Každý uzol dedí z Node alebo CompositeNode:
Document: koreň; vystavujeDisplayName,CreationTime,FileFormatPage: priamy potomokDocument; vystavujeTitle,Author,CreationTime,LastModifiedTime,LevelTitle: vystavujeTitleText,TitleDate,TitleTime(všetkyRichTextuzly)Outline: pozičný kontajner sHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: listový kontajner; vystavujeNumberList
Metódy navigácie na CompositeNode:
| Metóda / Vlastnosť | Popis |
|---|---|
FirstChild, LastChild | Priamy prístup k priamemu potomkovi |
GetChildNodes(Type) | Rekurzívne, typovo filtrované vyhľadávanie |
AppendChildLast(node) | Pridať podriadený na koniec |
AppendChildFirst(node) | Pridať podriadený na začiatok |
InsertChild(index, node) | Vložiť na pozíciu |
RemoveChild(node) | Odstrániť podriadený |
for child in node | Iterovať priame podriadené |
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}")Extrahovanie obsahu Rich Text
RichText uzly vystavujú:
Text: str: úplný čistý textový reťazecTextRuns: list[TextRun]: zoznam formátovaných segmentovTags: list[NoteTag]: OneNote značky pripojené k tomuto blokuAppend(text, style=None): pridať textový úsek v pamätiReplace(old_value, new_value): substitúcia reťazca v pamäti
Každý TextRun nesie:
| Vlastnosť | Typ | Popis |
|---|---|---|
Text | str | Text segmentu |
Style | TextStyle | Formátovacie metadáta |
TextStyle vlastnosti:
| Vlastnosť | Typ |
|---|---|
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}")Extrahovanie obrázkov
Image uzly odhaľujú surové bajty a metadáta pre každý vložený obrázok:
| Vlastnosť | Typ | Popis |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Surové dáta obrázka |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[NoteTag] | Pripojené značky OneNote |
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)")Extrahovanie pripojených súborov
AttachedFile uzly odhaľujú vložené prílohy súborov:
| Vlastnosť | Typ | Popis |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Surové dáta súboru |
Tags | list[NoteTag] | Pripojené značky OneNote |
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)Analyzovanie tabuliek
Table, TableRow, a TableCell odhaľuje úplnú štruktúru tabuľky:
| Trieda | Kľúčové vlastnosti |
|---|---|
Table | Columns: list[TableColumn] (každý TableColumn má .Width a .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Prechádzajte bunky cez GetChildNodes(TableCell) |
TableCell | Obsahuje RichText, Image, a ďalšie uzly obsahu |
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)Inšpekcia OneNote značiek
NoteTag sa objavuje na RichText, Image, AttachedFile, a Table uzly cez ich .Tags vlastnosť. OutlineElement nemá .Tags vlastnosť. NoteTag vlastnosti:
| Vlastnosť | Typ | Popis |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
Továrenská metóda: NoteTag.CreateYellowStar() vytvára štandardný uzol značky s žltou hviezdou.
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})")Podpora číslovaných zoznamov
OutlineElement.NumberList zverejňuje:
| Vlastnosť | Typ | Popis |
|---|---|---|
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}")Prechádzanie DocumentVisitor
DocumentVisitor poskytuje vzor návštevníka pre štruktúrované prechádzanie celým dokumentom. Prepíšte akýkoľvek VisitXxxStart / VisitXxxEnd metódu na zachytenie špecifických typov uzlov:
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 do PDF
Ulož načítaný dokument do PDF pomocou Document.Save(). Podporované prostredníctvom voliteľného backendu ReportLab.
from aspose.note import Document, SaveFormat
doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)PdfSaveOptions
| Možnosť | Typ | Popis |
|---|---|---|
PageIndex | int | Pole existuje; neodovzdávané PDF exportéru vo verzii v26.3.1 (nemá žiadny vplyv) |
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()Referencie formátov a enumov
SaveFormat
| Hodnota | Stav |
|---|---|
SaveFormat.Pdf | Implementované (vyžaduje ReportLab) |
FileFormat
Document.FileFormat poskytuje najlepšie úsilie o určenie verzie formátu súboru OneNote. Enum deklaruje tri hodnoty:
| Hodnota | Popis |
|---|---|
FileFormat.OneNote2010 | Formát OneNote 2010 |
FileFormat.OneNoteOnline | Formát OneNote Online |
FileFormat.OneNote2007 | Formát 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
Aktuálne obmedzenia
| Obmedzenie | Detail |
|---|---|
| Iba na čítanie | Zápis späť do .one formát nie je implementovaný |
| Žiadne šifrovanie | Šifrované dokumenty vyvolávajú IncorrectPasswordException |
| PDF iba pre export | Iné SaveFormat hodnoty vyvolávajú UnsupportedSaveFormatException |
| ReportLab je vyžadovaný pre PDF | Inštalovať pip install "aspose-note[pdf]" samostatne |
GetPageHistory vracia jednoprvkový zoznam | Plná prechádzka históriou stránok je len náčrt; vracia [page] |
DetectLayoutChanges() | Kompatibilný náčrt; žiadna operácia |
Tipy a osvedčené postupy
- Skontrolujte, či je None:
Page.Title,Title.TitleText,OutlineElement.NumberList, a väčšina polí metadát môže byťNone. Vždy chráňte pomocouif x is not Nonealeboif xpred prístupom k vlastnostiam. - Použite
GetChildNodes(Type)na rekurzívne vyhľadávanie namiesto manuálneho prechádzania stromu. Vyhľadáva celý podstrom. - Iterovať priamych potomkov s
for child in nodekeď potrebujete iba okamžitých potomkov. - Spracovať kódovanie vo Windows: Vo Windows,
sys.stdoutmôže používať staršiu kódovú stránku. Pridajtesys.stdout.reconfigure(encoding="utf-8", errors="replace")pri spustení pri tlači Unicode textu. - Nainštalujte
[pdf]dodatočné: NeimportujteSaveFormat.Pdffunkcionalitu bez predchádzajúcej inštaláciepip install "aspose-note[pdf]". Bez ReportLab bude ukladanie do PDF vyvolávať chybu importu počas behu.