Pregled funkcija — Aspose.Note FOSS za Python
Aspose.Note FOSS for Python (package aspose-note, version 26.3.1) pruža Python API za čitanje Microsoft OneNote .one sekcijskih fajlova i njihovog izvoza u PDF. Sve funkcije navedene ispod su proverene u odnosu na izvorni kod repozitorijuma, README i primer skripti.
Instalacija i podešavanje
Instalirajte sa PyPI:
pip install aspose-noteZa podršku izvoza u PDF (zahteva ReportLab):
pip install "aspose-note[pdf]"Zahtevi: Python 3.10 ili noviji. Nije potrebna instalacija Microsoft Office-a.
Funkcionalnosti i mogućnosti
.Učitavanje .one fajla
Učitaj Microsoft OneNote sekcijske fajlove iz putanje fajla ili bilo kog binarnog toka (file handle, io.BytesIO, telo HTTP odgovora, cloud storage stream).
Document.FileFormatpruža najbolju moguću indikaciju verzije formata OneNote fajla (OneNote2010, OneNoteOnline, ili OneNote2007)- Učitavanje zasnovano na stream-u eliminiše I/O na disku za rad u memoriji ili mrežne tokove
LoadOptions.LoadHistoryzastavica kontroliše da li je istorija stranice uključena 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
Ceo OneNote dokument je izložen kao stablo tipiziranih Python objekata. Svaki čvor nasleđuje od Node ili CompositeNode:
Document: koren; izlažeDisplayName,CreationTime,FileFormatPage: direktno dete odDocument; izlažeTitle,Author,CreationTime,LastModifiedTime,LevelTitle: izlažeTitleText,TitleDate,TitleTime(sveRichTextčvorova)Outline: pozicioni kontejner saHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: listni kontejner; izlažeNumberList
Metode navigacije na CompositeNode:
| Metod / Svojstvo | Opis |
|---|---|
FirstChild, LastChild | Direktan pristup detetu |
GetChildNodes(Type) | Rekurzivna pretraga filtrirana po tipu |
AppendChildLast(node) | Dodaj dete na kraj |
AppendChildFirst(node) | Dodaj dete na početak |
InsertChild(index, node) | Umetni na poziciju |
RemoveChild(node) | Ukloni dete |
for child in node | Iteriraj direktna deca |
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: potpuni obični tekstualni stringTextRuns: list[TextRun]: lista formatiranih segmenataTags: list[NoteTag]: OneNote oznake prikačene na ovaj blokAppend(text, style=None): dodaj tekstualni niz u memorijiReplace(old_value, new_value): zamena stringa u memoriji
Svaki TextRun sadrži:
| Svojstvo | Tip | Opis |
|---|---|---|
Text | str | Tekst segmenta |
Style | TextStyle | Metapodaci formatiranja |
TextStyle svojstva:
| Svojstvo | 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}")Ekstrakcija slika
Image čvorovi izlažu sirove bajtove i metapodatke za svaku ugrađenu sliku:
| Svojstvo | Tip | 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 fajlova
AttachedFile nodes izlažu ugrađene priloge datoteka:
| Svojstvo | Tip | Opis |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Sirovi podaci fajla |
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 tabela
Table, TableRow, i TableCell prikaži punu strukturu tabele:
| Klasa | Ključna svojstva |
|---|---|
Table | Columns: list[TableColumn] (svaki TableColumn ima .Width i .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Iterirajte ćelije putem GetChildNodes(TableCell) |
TableCell | Sadrži RichText, Image, i drugi čvorovi 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)Inspekcija OneNote oznaka
NoteTag pojavljuje se na RichText, Image, AttachedFile, i Table čvorove putem njihovih .Tags svojstvo. OutlineElement ne poseduje .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` |
Fabrika metoda: NoteTag.CreateYellowStar() kreira standardni čvor oznake žute zvezde.
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 numerisane liste
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 kroz DocumentVisitor
DocumentVisitor obezbeđuje obrazac posetioca za strukturirano pretraživanje celog dokumenta. Prepišite bilo koji VisitXxxStart / VisitXxxEnd metod za presretanje određenih tipova č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
Sačuvajte 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; nije prosleđeno PDF izvoznika u v26.3.1 (nema efekta) |
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
| Vrednost | Status |
|---|---|
SaveFormat.Pdf | Implementirano (zahteva ReportLab) |
FileFormat
Document.FileFormat pruža indikaciju najbolje moguće verzije formata OneNote fajla. Enum definiše tri vrednosti:
| Vrednost | 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 nazad u .one format nije implementiran |
| Nema enkripcije | Enkriptovani dokumenti izazivaju IncorrectPasswordException |
| PDF samo za izvoz | Ostalo SaveFormat vrednosti podižu UnsupportedSaveFormatException |
| ReportLab je potreban za PDF | Instaliraj pip install "aspose-note[pdf]" odvojeno |
GetPageHistory vraća listu sa jednim elementom | Potpuno pretraživanje istorije stranice je stub; vraća [page] |
DetectLayoutChanges() | Stub za kompatibilnost; nema operacije |
Saveti i najbolje prakse
- Proveri da li je None:
Page.Title,Title.TitleText,OutlineElement.NumberList, a većina polja metapodataka može bitiNone. Uvek zaštiti saif x is not Noneiliif xpre pristupa svojstvima. - Koristi
GetChildNodes(Type)za rekurzivno pretraživanje umesto ručnog iteriranja kroz stablo. Pretražuje čitavu podstablo. - Iteriraj direktna deca sa
for child in nodekada su vam potrebna samo neposredna deca. - Upravljajte kodiranjem na Windowsu: Na Windowsu,
sys.stdoutmože koristiti staru kodnu stranicu. Dodajtesys.stdout.reconfigure(encoding="utf-8", errors="replace")pri pokretanju prilikom ispisivanja Unicode teksta. - Instalirajte
[pdf]dodatno: Ne uvoziSaveFormat.Pdffunkcionalnost bez prethodnog instaliranjapip install "aspose-note[pdf]". Bez ReportLab, čuvanje u PDF-u će izazvati grešku pri uvozu u vreme izvršavanja.