Savybių apžvalga — Aspose.Note FOSS for Python

Aspose.Note FOSS for Python (package aspose-note, versija 26.3.1) suteikia Python API, skirtą Microsoft OneNote .one skyriaus failus ir jų eksportavimą į PDF. Visos žemiau išvardintos funkcijos patikrintos pagal saugyklos šaltinio kodą, README ir pavyzdinius scenarijus.

Įdiegimas ir konfigūracija

Įdiekite iš PyPI:

pip install aspose-note

PDF eksportui (reikalauja ReportLab):

pip install "aspose-note[pdf]"

Reikalavimai: Python 3.10 arba vėlesnė. Microsoft Office įdiegimo nereikia.


Funkcijos ir galimybės

.one failų įkėlimas

Įkelkite Microsoft OneNote skyriaus failus iš failo kelio arba bet kurio dvejetainio srauto (failo rankenėlės, io.BytesIO, HTTP atsakymo kūno, debesų saugyklos srauto).

  • Document.FileFormat suteikia geriausią įmanomą OneNote failo formato versijos indikaciją (OneNote2010, OneNoteOnline arba OneNote2007)
  • Srauto pagrindu vykdomas įkėlimas pašalina disko I/O atminties ar tinklo darbo srautams.
  • LoadOptions.LoadHistory žymė valdo, ar puslapio istorija įtraukiama į 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)

Dokumento DOM naršymas

Visas OneNote dokumentas pateikiamas kaip tipų Python objektų medis. Kiekvienas mazgas paveldi iš Node arba CompositeNode:

  • Document: šaknis; atskleidžia DisplayName, CreationTime, FileFormat
  • Page: tiesioginis vaikas of Document; atskleidžia Title, Author, CreationTime, LastModifiedTime, Level
  • Title: atskleidžia TitleText, TitleDate, TitleTime (visi RichText mazgai)
  • Outline: pozicinis konteineris su HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: lapų konteineris; atskleidžia NumberList

Naršymo metodai ant CompositeNode:

Metodas / SavybėAprašymas
FirstChild, LastChildTiesioginė vaiko prieiga
GetChildNodes(Type)Rekursinė, tipų filtruota paieška
AppendChildLast(node)Pridėti vaiką pabaigoje
AppendChildFirst(node)Pridėti vaiką pradžioje
InsertChild(index, node)Įterpti į poziciją
RemoveChild(node)Pašalinti vaiką
for child in nodeIteruoti tiesioginius vaikus
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}")

Raiškiojo teksto turinio išgavimas

RichText mazgai atskleidžia:

  • Text: str: pilnas paprasto teksto eilutė
  • TextRuns: list[TextRun]: formatuotų segmentų sąrašas
  • Tags: list[NoteTag]: OneNote žymės, prisegtos prie šio bloko
  • Append(text, style=None): pridėti teksto seką atmintyje
  • Replace(old_value, new_value): eilutės pakeitimas atmintyje

Kiekvienas TextRun turi:

SavybėTipasAprašymas
TextstrSegmento tekstas
StyleTextStyleFormatavimo metaduomenys

TextStyle savybės:

SavybėTipas
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}")

Vaizdų išgavimas

Image mazgai atskleidžia neapdorotus baitus ir metaduomenis kiekvienam įterptam vaizdui:

SavybėTipasAprašymas
FileName`strNone`
BytesbytesNeapdoroti paveikslėlio duomenys
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Pridėtos OneNote žymės
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)")

Prisegtų failų išgavimas

AttachedFile mazgai atskleidžia įterptus failų priedus:

SavybėTipasAprašymas
FileName`strNone`
BytesbytesNeapdoroti failo duomenys
Tagslist[NoteTag]Prisegtos OneNote žymos
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)

Lentelės analizė

Table, TableRow, ir TableCell atskleisti visą lentelės struktūrą:

KlasėRaktinės savybės
TableColumns: list[TableColumn] (kiekvienas TableColumn turi .Width ir .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowKartoti ląsteles per GetChildNodes(TableCell)
TableCellTuri RichText, Image, ir kiti turinio mazgai
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 žymių peržiūra

NoteTag atsiranda RichText, Image, AttachedFile, ir Table mazgai per jų .Tags savybę. OutlineElement neturi .Tags savybės. NoteTag savybės:

SavybėTipasAprašymas
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Gamintojo metodas: NoteTag.CreateYellowStar() sukuria standartinį geltonos žvaigždės žymės mazgą.

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})")

Numeruoto sąrašo palaikymas

OutlineElement.NumberList atskleidžia:

SavybėTipasAprašymas
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 perėjimas

DocumentVisitor suteikia lankytojo šabloną struktūruotam viso dokumento perėjimui. Perrašykite bet kurį VisitXxxStart / VisitXxxEnd metodą, kad sugautumėte konkrečius mazgo tipus:

  • 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 eksportas

Išsaugoti įkeltą dokumentą PDF naudojant Document.Save(). Palaikoma per pasirenkamą ReportLab backendą.

from aspose.note import Document, SaveFormat

doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)

PdfSaveOptions

ParinktisTipasAprašymas
PageIndexintLaukas egzistuoja; neperduodama PDF eksporteriui v26.3.1 (neturi jokios įtakos)
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()

Formato ir enumų nuoroda

SaveFormat

ReikšmėBūsena
SaveFormat.PdfĮgyvendinta (reikalauja ReportLab)

FileFormat

Document.FileFormat pateikia geriausią įmanomą OneNote failo formato versijos indikaciją. Enum deklaruoja tris reikšmes:

ReikšmėAprašymas
FileFormat.OneNote2010OneNote 2010 formatas
FileFormat.OneNoteOnlineOneNote Online formatas
FileFormat.OneNote2007OneNote 2007 formatas

NodeType

NodeType.Document, NodeType.Page, NodeType.Outline, NodeType.OutlineElement, NodeType.RichText, NodeType.Image, NodeType.Table, NodeType.AttachedFile

HorizontalAlignment

HorizontalAlignment.Left, HorizontalAlignment.Center, HorizontalAlignment.Right


Dabartiniai apribojimai

RibojimasDetalė
Tik skaitymuiRašymas atgal į .one formatas neįgyvendintas
Nėra šifravimoUžšifruoti dokumentai sukelia IncorrectPasswordException
PDF tik eksportuiKita SaveFormat reikšmės sukelia UnsupportedSaveFormatException
ReportLab reikalingas PDFĮdiegti pip install "aspose-note[pdf]" atskirai
GetPageHistory grąžina vieno elemento sąrašąVisos puslapio istorijos perėjimas yra stubas; grąžina [page]
DetectLayoutChanges()Suderinamumo stubas; jokios operacijos

Patarimai ir geriausia praktika

  • Patikrinkite, ar yra None: Page.Title, Title.TitleText, OutlineElement.NumberList, ir dauguma metaduomenų laukų gali būti None. Visada apsaugokite su if x is not None arba if x prieš prieinant prie savybių.
  • Naudokite GetChildNodes(Type) rekursinei paieškai, o ne rankiniu medžio iteravimu. Ji ieško viso po-medžio.
  • Iteruokite tiesioginius vaikus su for child in node kai jums reikia tik tiesioginių vaikų.
  • Tvarkykite kodavimą Windows sistemoje: „Windows“ operacinėje sistemoje, sys.stdout gali naudoti seną kodų puslapį. Pridėkite sys.stdout.reconfigure(encoding="utf-8", errors="replace") paleidimo metu spausdinant Unicode tekstą.
  • Įdiegti [pdf] papildoma: Neimportuokite SaveFormat.Pdf funkcionalumas be ankstesnio įdiegimo pip install "aspose-note[pdf]". Be ReportLab, PDF įrašymas sukels importavimo klaidą vykdymo metu.
 Lietuvių