Επισκόπηση Χαρακτηριστικών — 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, FileFormat
  • Page: άμεσο παιδί του Document; εκθέτει Title, Author, CreationTime, LastModifiedTime, Level
  • Title: εκθέτει TitleText, TitleDate, TitleTime (όλοι RichText οι κόμβοι)
  • Outline: χωρητικότητας θέσης με HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: δοχείο φύλλου· εκθέτει 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 περιέχει:

ΙδιότηταΤύποςΠεριγραφή
TextstrΚείμενο τμήματος
StyleTextStyleΜεταδεδομένα μορφοποίησης

TextStyle ιδιότητες:

ΙδιότηταΤύπος
IsBold, IsItalic, IsUnderline, IsStrikethroughbool
IsSuperscript, IsSubscriptbool
FontName`str
FontSize`float
FontColor, Highlight`int
Language`int
IsHyperlinkbool
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`strNone`
BytesbytesΑκατέργαστα δεδομένα εικόνας
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[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`strNone`
BytesbytesΑκατέργαστα δεδομένα αρχείου
Tagslist[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 αποκαλύπτει τη πλήρη δομή του πίνακα:

ΚλάσηΚύρια Ιδιότητες
TableColumns: 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`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Μέθοδος κατασκευής: 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`strNone`
Restart`intNone`
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

ΕπιλογήΤύποςΠεριγραφή
PageIndexintΤο πεδίο υπάρχει; δεν προωθείται στον εξαγωγέα PDF στην έκδοση v26.3.1 (δεν έχει καμία επίδραση)
PageCount`intNone`
ImageCompression`AnyNone`
JpegQuality`intNone`
PageSettings`AnyNone`
PageSplittingAlgorithm`AnyNone`
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 θα προκαλέσει σφάλμα εισαγωγής κατά την εκτέλεση.
 Ελληνικά