Επισκόπηση Χαρακτηριστικών — Aspose.Note FOSS για Python
Aspose.Note FOSS for Python (package aspose-note, έκδοση 26.3.1) παρέχει ένα Python API για την ανάγνωση του Microsoft OneNote .one αρχεία ενότητας και την εξαγωγή τους σε PDF. Όλες οι δυνατότητες που αναφέρονται παρακάτω έχουν επαληθευτεί έναντι του πηγαίου κώδικα του αποθετηρίου, του README και των παραδειγματικών σεναρίων.
Εγκατάσταση και Ρύθμιση
Εγκατάσταση από το PyPI:
pip install aspose-noteΓια υποστήριξη εξαγωγής PDF (απαιτεί ReportLab):
pip install "aspose-note[pdf]"Απαιτήσεις: Python 3.10 ή νεότερη. Δεν απαιτείται εγκατάσταση του Microsoft Office.
Χαρακτηριστικά και Δυνατότητες
.Φόρτωση αρχείου .one
Φορτώστε αρχεία ενότητας του Microsoft OneNote από διαδρομή αρχείου ή οποιοδήποτε δυαδικό ρεύμα (χειριστήριο αρχείου, io.BytesIO, σώμα απόκρισης HTTP, ρεύμα αποθήκευσης στο cloud).
Document.FileFormatπαρέχει μια εκτίμηση της έκδοσης της μορφής αρχείου OneNote (OneNote2010, OneNoteOnline ή OneNote2007)- Η φόρτωση με βάση το ρεύμα εξαλείφει τις ενέργειες I/O δίσκου για ροές εργασίας στη μνήμη ή το δίκτυο
LoadOptions.LoadHistoryη σημαία ελέγχει αν το ιστορικό σελίδας περιλαμβάνεται στο 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)Διαπέραση DOM εγγράφου
Το πλήρες έγγραφο OneNote εκτίθεται ως δέντρο από τυποποιημένα αντικείμενα Python. Κάθε κόμβος κληρονομεί από Node ή CompositeNode:
Document: ρίζα· εκθέτειDisplayName,CreationTime,FileFormatPage: άμεσο παιδί τουDocument; εκθέτειTitle,Author,CreationTime,LastModifiedTime,LevelTitle: εκθέτειTitleText,TitleDate,TitleTime(όλοιRichTextοι κόμβοι)Outline: χωρητικότητας θέσης μεHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: δοχείο φύλλου· εκθέτειNumberList
Μέθοδοι πλοήγησης στο CompositeNode:
| Μέθοδος / Ιδιότητα | Περιγραφή |
|---|---|
FirstChild, LastChild | Άμεση πρόσβαση σε παιδί |
GetChildNodes(Type) | Αναδρομική, φιλτραρισμένη κατά τύπο αναζήτηση |
AppendChildLast(node) | Προσθήκη παιδιού στο τέλος |
AppendChildFirst(node) | Προσθήκη παιδιού στην αρχή |
InsertChild(index, node) | Εισαγωγή στη θέση |
RemoveChild(node) | Αφαίρεση παιδιού |
for child in node | Επανάληψη άμεσων παιδιών |
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}")Εξαγωγή Περιεχομένου Πλούσιου Κειμένου
RichText Οι κόμβοι εκθέτουν:
Text: str: πλήρης αλφαριθμητικό απλού κειμένουTextRuns: list[TextRun]: λίστα μορφοποιημένων τμημάτωνTags: list[NoteTag]: ετικέτες OneNote συνδεδεμένες με αυτό το μπλοκAppend(text, style=None): προσθήκη ακολουθίας κειμένου στη μνήμηReplace(old_value, new_value): αντικατάσταση αλφαριθμητικού στη μνήμη
Κάθε TextRun περιέχει:
| Ιδιότητα | Τύπος | Περιγραφή |
|---|---|---|
Text | str | Κείμενο τμήματος |
Style | TextStyle | Μεταδεδομένα μορφοποίησης |
TextStyle ιδιότητες:
| Ιδιότητα | Τύπος |
|---|---|
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}")Εξαγωγή Εικόνων
Image Οι κόμβοι εκθέτουν ακατέργαστα bytes και μεταδεδομένα για κάθε ενσωματωμένη εικόνα:
| Ιδιότητα | Τύπος | Περιγραφή |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Ακατέργαστα δεδομένα εικόνας |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[NoteTag] | Συνημμένες ετικέτες 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)")Εξαγωγή Συνημμένων Αρχείων
AttachedFile Οι κόμβοι εκθέτουν ενσωματωμένα συνημμένα αρχεία:
| Ιδιότητα | Τύπος | Περιγραφή |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Ακατέργαστα δεδομένα αρχείου |
Tags | list[NoteTag] | Συνημμένες ετικέτες 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)Ανάλυση Πίνακα
Table, TableRow, και TableCell αποκαλύπτει τη πλήρη δομή του πίνακα:
| Κλάση | Κύρια Ιδιότητες |
|---|---|
Table | Columns: list[TableColumn] (κάθε TableColumn έχει .Width και .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Επανάληψη κελιών μέσω GetChildNodes(TableCell) |
TableCell | Περιέχει RichText, Image, και άλλους κόμβους περιεχομένου |
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)Έλεγχος Ετικετών OneNote
NoteTag εμφανίζεται στο RichText, Image, AttachedFile, και Table κόμβοι μέσω των .Tags ιδιότητα. OutlineElement δεν έχει ένα .Tags ιδιότητα. NoteTag ιδιότητες:
| Ιδιότητα | Τύπος | Περιγραφή |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
Μέθοδος κατασκευής: NoteTag.CreateYellowStar() δημιουργεί έναν τυπικό κόμβο ετικέτας κίτριου αστεριού.
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})")Υποστήριξη αριθμημένης λίστας
OutlineElement.NumberList εκθέτει:
| Ιδιότητα | Τύπος | Περιγραφή |
|---|---|---|
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}")Διαπέραση DocumentVisitor
DocumentVisitor παρέχει ένα μοτίβο επισκέπτη για δομημένη πλήρη περιήγηση εγγράφου. Υπερκαλύψτε οποιοδήποτε VisitXxxStart / VisitXxxEnd μέθοδο για την παρέμβαση σε συγκεκριμένους τύπους κόμβων:
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
Αποθηκεύστε ένα φορτωμένο έγγραφο σε PDF χρησιμοποιώντας Document.Save(). Υποστηρίζεται μέσω του προαιρετικού backend ReportLab.
from aspose.note import Document, SaveFormat
doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)PdfSaveOptions
| Επιλογή | Τύπος | Περιγραφή |
|---|---|---|
PageIndex | int | Το πεδίο υπάρχει; δεν προωθείται στον εξαγωγέα PDF στην έκδοση v26.3.1 (δεν έχει καμία επίδραση) |
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()Αναφορά μορφής και Enum
SaveFormat
| Τιμή | Κατάσταση |
|---|---|
SaveFormat.Pdf | Υλοποιήθηκε (απαιτεί ReportLab) |
FileFormat
Document.FileFormat παρέχει μια ένδειξη με τη μέγιστη δυνατή προσπάθεια για την έκδοση του μορφότυπου αρχείου OneNote. Η enum δηλώνει τρεις τιμές:
| Τιμή | Περιγραφή |
|---|---|
FileFormat.OneNote2010 | Μορφή OneNote 2010 |
FileFormat.OneNoteOnline | Μορφή OneNote Online |
FileFormat.OneNote2007 | Μορφή 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
Τρέχοντες περιορισμοί
| Περιορισμός | Λεπτομέρεια |
|---|---|
| Μόνο για ανάγνωση | Εγγραφή πίσω σε .one η μορφή δεν έχει υλοποιηθεί |
| Καμία κρυπτογράφηση | Τα κρυπτογραφημένα έγγραφα προκαλούν IncorrectPasswordException |
| PDF μόνο για εξαγωγή | Άλλο SaveFormat τιμές προκαλούν UnsupportedSaveFormatException |
| Απαιτείται το ReportLab για PDF | Εγκατάσταση pip install "aspose-note[pdf]" ξεχωριστά |
GetPageHistory επιστρέφει λίστα με ένα στοιχείο | Η περιήγηση πλήρους ιστορικού σελίδας είναι ψεύτικη· επιστρέφει [page] |
DetectLayoutChanges() | Ψεύτικο συμβατότητας· καμία ενέργεια |
Συμβουλές και Καλές Πρακτικές
- Έλεγχος για None:
Page.Title,Title.TitleText,OutlineElement.NumberList, και τα περισσότερα πεδία μεταδεδομένων μπορούν ναNone. Πάντα να προστατεύετε μεif x is not Noneήif xπριν την πρόσβαση στις ιδιότητες. - Χρησιμοποιήστε
GetChildNodes(Type)για αναδρομική αναζήτηση αντί για χειροκίνητη επανάληψη του δέντρου. Αναζητά ολόκληρο το υποδέντρο. - Επανάληψη άμεσων παιδιών με
for child in nodeόταν χρειάζεστε μόνο άμεσα παιδιά. - Διαχείριση κωδικοποίησης στα Windows: Στα Windows,
sys.stdoutμπορεί να χρησιμοποιήσει μια παλαιά κωδικοσελίδα. Προσθέστεsys.stdout.reconfigure(encoding="utf-8", errors="replace")κατά την εκκίνηση όταν εκτυπώνετε κείμενο Unicode. - Εγκαταστήστε
[pdf]επιπλέον: Μην εισάγετεSaveFormat.Pdfλειτουργικότητα χωρίς πρώτα να εγκαταστήσετεpip install "aspose-note[pdf]". Χωρίς το ReportLab, η αποθήκευση σε PDF θα προκαλέσει σφάλμα εισαγωγής κατά την εκτέλεση.