Pregled značajki — Aspose.Note FOSS za Python
Aspose.Note FOSS for Python (package aspose-note, verzija 26.3.1) pruža Python API za čitanje Microsoft OneNote .one datoteke odjeljaka i njihov izvoz u PDF. Sve značajke navedene u nastavku provjerene su prema izvornom kodu repozitorija, README-u i primjerima skripti.
Instalacija i postavljanje
Instalirajte s PyPI:
pip install aspose-noteZa podršku izvoza u PDF (zahtijeva ReportLab):
pip install "aspose-note[pdf]"Zahtjevi: Python 3.10 ili noviji. Nije potrebna instalacija Microsoft Officea.
Značajke i mogućnosti
.Učitavanje .one datoteka
Učitaj Microsoft OneNote datoteke odjeljaka iz putanje datoteke ili bilo kojeg binarnog toka (rukovatelj datotekom, io.BytesIO, tijelo HTTP odgovora, tok pohrane u oblaku).
Document.FileFormatpruža indikaciju najviše moguće točnosti verzije formata OneNote datoteke (OneNote2010, OneNoteOnline ili OneNote2007)- Učitavanje temeljeno na strimu eliminira I/O na disku za radne tokove u memoriji ili mrežne.
LoadOptions.LoadHistoryoznaka kontrolira hoće li se povijest stranice uključiti u 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)Prolazak kroz DOM dokumenta
Cijeli OneNote dokument izlaže se kao stablo tipiziranih Python objekata. Svaki čvor nasljeđuje od Node ili CompositeNode:
Document: korijen; izlažeDisplayName,CreationTime,FileFormatPage: izravni potomak odDocument; izlažeTitle,Author,CreationTime,LastModifiedTime,LevelTitle: izlažeTitleText,TitleDate,TitleTime(sviRichTextčvorovi)Outline: kontejner pozicije sHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: kontejner list; izlažeNumberList
Metode navigacije na CompositeNode:
| Metoda / Svojstvo | Opis |
|---|---|
FirstChild, LastChild | Izravni pristup djetetu |
GetChildNodes(Type) | Rekurzivna, filtrirana po tipu pretraga |
AppendChildLast(node) | Dodaj dijete na kraj |
AppendChildFirst(node) | Dodaj dijete na početak |
InsertChild(index, node) | Umetni na poziciju |
RemoveChild(node) | Ukloni dijete |
for child in node | Iteriraj izravna djeca |
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}")Ekstrakcija sadržaja obogaćenog teksta
RichText čvorovi izlažu:
Text: str: cijeli obični tekstualni nizTextRuns: list[TextRun]: popis formatiranih segmenataTags: list[NoteTag]: OneNote oznake pridružene ovom blokuAppend(text, style=None): dodaj tekstualni niz u memorijiReplace(old_value, new_value): zamjena niza u memoriji
Svaki TextRun sadrži:
| Svojstvo | Tip | Opis |
|---|---|---|
Text | str | Tekst segmenta |
Style | TextStyle | Metapodaci formatiranja |
TextStyle svojstva:
| Svojstvo | Vrsta |
|---|---|
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}")Ekstrakcija slika
Image čvorovi izlažu sirove bajtove i metapodatke za svaku ugrađenu sliku:
| Svojstvo | Vrsta | Opis |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Sirovi podaci slike |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[NoteTag] | Priložene OneNote oznake |
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)")Ekstrakcija priloženih datoteka
AttachedFile čvorovi izlažu ugrađene datoteke privitaka:
| Svojstvo | Vrsta | Opis |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Sirovi podaci datoteke |
Tags | list[NoteTag] | Priložene OneNote oznake |
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)Parsiranje tablica
Table, TableRow, i TableCell izloži cijelu strukturu tablice:
| Klasa | Ključna svojstva |
|---|---|
Table | Columns: list[TableColumn] (svaki TableColumn ima .Width i .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Prođi kroz ćelije putem GetChildNodes(TableCell) |
TableCell | Sadrži RichText, Image, i druge čvorove sadržaja |
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)Pregled OneNote oznaka
NoteTag pojavljuje se na RichText, Image, AttachedFile, i Table čvorovi putem njihovog .Tags svojstva. OutlineElement nema .Tags svojstvo. NoteTag svojstva:
| Svojstvo | Tip | Opis |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
Metoda tvornice: NoteTag.CreateYellowStar() stvara standardni čvor oznake žute zvijezde.
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})")Podrška za numerirane popise
OutlineElement.NumberList izlaže:
| Svojstvo | Tip | Opis |
|---|---|---|
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}")Prolaz DocumentVisitor-a
DocumentVisitor omogućuje obrazac posjetitelja za strukturirano pretraživanje cijelog dokumenta. Nadjačajte bilo koji VisitXxxStart / VisitXxxEnd metodu za presretanje određenih vrsta čvorova:
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}")PDF izvoz
Spremi učitani dokument u PDF koristeći Document.Save(). Podržano putem opcionalnog ReportLab backenda.
from aspose.note import Document, SaveFormat
doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)PdfSaveOptions
| Opcija | Tip | Opis |
|---|---|---|
PageIndex | int | Polje postoji; ne prosljeđuje se PDF izvoznika u v26.3.1 (nema učinka) |
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()Referenca formata i enumeracija
SaveFormat
| Vrijednost | Stanje |
|---|---|
SaveFormat.Pdf | Implementirano (zahtijeva ReportLab) |
FileFormat
Document.FileFormat pruža indikaciju verzije OneNote formata datoteke na najbolji mogući način. Enum deklarira tri vrijednosti:
| Vrijednost | Opis |
|---|---|
FileFormat.OneNote2010 | OneNote 2010 format |
FileFormat.OneNoteOnline | OneNote Online format |
FileFormat.OneNote2007 | OneNote 2007 format |
NodeType
NodeType.Document, NodeType.Page, NodeType.Outline, NodeType.OutlineElement, NodeType.RichText, NodeType.Image, NodeType.Table, NodeType.AttachedFile
HorizontalAlignment
HorizontalAlignment.Left, HorizontalAlignment.Center, HorizontalAlignment.Right
Trenutna ograničenja
| Ograničenje | Detalj |
|---|---|
| Samo za čitanje | Pisanje natrag u .one format nije implementiran |
| Nema šifriranja | Šifrirani dokumenti uzrokuju IncorrectPasswordException |
| PDF samo za izvoz | Ostalo SaveFormat vrijednosti uzrokuju UnsupportedSaveFormatException |
| ReportLab je potreban za PDF | Instaliraj pip install "aspose-note[pdf]" odvojeno |
GetPageHistory vraća listu s jednim elementom | Potpuno traversiranje povijesti stranice je zamjenski kod; vraća [page] |
DetectLayoutChanges() | Kompatibilni zamjenski kod; bez operacije |
Savjeti i najbolje prakse
- Provjeri None:
Page.Title,Title.TitleText,OutlineElement.NumberList, a većina polja metapodataka može bitiNone. Uvijek zaštiti sif x is not Noneiliif xprije pristupa svojstvima. - Koristite
GetChildNodes(Type)za rekurzivno pretraživanje umjesto ručnog prolaska kroz stablo. Pretražuje cijelo podstablo. - Iterirajte izravne potomke s
for child in nodekada su vam potrebni samo neposredni potomci. - Rukovanje kodiranjem na Windowsu: Na Windowsu,
sys.stdoutmože koristiti staru kodnu stranicu. Dodajtesys.stdout.reconfigure(encoding="utf-8", errors="replace")prilikom pokretanja kada ispisujete Unicode tekst. - Instalirajte
[pdf]dodatne: Nemojte uvestiSaveFormat.Pdffunkcionalnost bez prethodne instalacijepip install "aspose-note[pdf]". Bez ReportLaba, spremanje u PDF će izazvati grešku uvoza u vrijeme izvođenja.