Gambaran Keseluruhan Ciri — Aspose.Note FOSS untuk Python

Aspose.Note FOSS for Python (package aspose-note, versi 26.3.1) menyediakan API Python untuk membaca Microsoft OneNote .one fail seksyen dan mengeksportnya ke PDF. Semua ciri yang disenaraikan di bawah telah disahkan berbanding kod sumber repositori, README, dan skrip contoh.

Pemasangan dan Persediaan

Pasang dari PyPI:

pip install aspose-note

Untuk sokongan eksport PDF (memerlukan ReportLab):

pip install "aspose-note[pdf]"

Keperluan: Python 3.10 atau lebih baru. Tiada pemasangan Microsoft Office diperlukan.


Ciri-ciri dan Keupayaan

.Pemuatkan Fail .one

Muatkan fail seksyen Microsoft OneNote daripada laluan fail atau mana-mana aliran binari (pemegang fail, io.BytesIO, badan respons HTTP, aliran storan awan).

  • Document.FileFormat menyediakan indikasi usaha terbaik bagi versi format fail OneNote (OneNote2010, OneNoteOnline, atau OneNote2007)
  • Pemuatkan berasaskan aliran menghapuskan I/O cakera untuk aliran kerja dalam memori atau rangkaian
  • LoadOptions.LoadHistory bendera mengawal sama ada sejarah halaman dimasukkan dalam 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)

Penelusuran DOM Dokumen

Dokumen OneNote penuh dipaparkan sebagai pokok objek Python berjenis. Setiap nod mewarisi daripada Node atau CompositeNode:

  • Document: root; mendedahkan DisplayName, CreationTime, FileFormat
  • Page: anak langsung kepada Document; mendedahkan Title, Author, CreationTime, LastModifiedTime, Level
  • Title: mendedahkan TitleText, TitleDate, TitleTime (semua RichText nod)
  • Outline: kontena kedudukan dengan HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: kontena daun; mendedahkan NumberList

Kaedah navigasi pada CompositeNode:

Kaedah / HartaKeterangan
FirstChild, LastChildAkses anak langsung
GetChildNodes(Type)Carian rekursif, ditapis mengikut jenis
AppendChildLast(node)Tambah anak di akhir
AppendChildFirst(node)Tambah anak di permulaan
InsertChild(index, node)Sisip pada kedudukan
RemoveChild(node)Buang anak
for child in nodeIterasi anak langsung
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}")

Pengekstrakan Kandungan Teks Kaya

RichText nod mendedahkan:

  • Text: str: rentetan teks biasa penuh
  • TextRuns: list[TextRun]: senarai segmen terformat
  • Tags: list[NoteTag]: tag OneNote yang dilampirkan pada blok ini
  • Append(text, style=None): tambahkan rentetan teks dalam memori
  • Replace(old_value, new_value): penggantian rentetan dalam memori

Setiap TextRun membawa:

SifatJenisDeskripsi
TextstrTeks segmen
StyleTextStyleMetadata pemformatan

TextStyle ciri-ciri:

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

Ekstraksi Imej

Image nod mendedahkan bait mentah dan metadata untuk setiap imej terbenam:

SifatJenisKeterangan
FileName`strNone`
BytesbytesData imej mentah
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Tag OneNote yang dilampirkan
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)")

Pengekstrakan Fail Dilampirkan

AttachedFile nod mendedahkan lampiran fail terbenam:

SifatJenisDeskripsi
FileName`strNone`
BytesbytesData fail mentah
Tagslist[NoteTag]Tag OneNote yang dilampirkan
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)

Penguraian Jadual

Table, TableRow, dan TableCell dedahkan struktur jadual penuh:

KelasSifat Utama
TableColumns: list[TableColumn] (setiap TableColumn mempunyai .Width dan .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowUlang sel melalui GetChildNodes(TableCell)
TableCellMengandungi RichText, Image, dan nod kandungan lain
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)

Pemeriksaan Tag OneNote

NoteTag muncul pada RichText, Image, AttachedFile, dan Table nod melalui .Tags sifat. OutlineElement tidak mempunyai .Tags sifat. NoteTag ciri-ciri:

SifatJenisKeterangan
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Kaedah kilang: NoteTag.CreateYellowStar() mencipta nod tag bintang kuning standard.

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

Sokongan Senarai Bernombor

OutlineElement.NumberList mendedahkan:

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

Penelusuran DocumentVisitor

DocumentVisitor menyediakan corak pelawat untuk penelusuran dokumen penuh yang berstruktur. Gantikan mana-mana VisitXxxStart / VisitXxxEnd kaedah untuk memintas jenis nod tertentu:

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

Eksport PDF

Simpan dokumen yang dimuatkan ke PDF menggunakan Document.Save(). Disokong melalui backend ReportLab pilihan.

from aspose.note import Document, SaveFormat

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

PdfSaveOptions

PilihanJenisDeskripsi
PageIndexintMedan wujud; tidak dihantar ke pengeksport PDF dalam v26.3.1 (tiada kesan)
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()

Rujukan Format dan Enum

SaveFormat

NilaiStatus
SaveFormat.PdfDilaksanakan (memerlukan ReportLab)

FileFormat

Document.FileFormat menyediakan indikasi usaha terbaik bagi versi format fail OneNote. Enum ini mengisytiharkan tiga nilai:

NilaiDeskripsi
FileFormat.OneNote2010format OneNote 2010
FileFormat.OneNoteOnlineformat OneNote Online
FileFormat.OneNote2007format 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


Sekatan Semasa

HadButiran
Baca-sahajaMenulis kembali ke .one format tidak dilaksanakan
Tiada penyulitanDokumen yang disulitkan menghasilkan IncorrectPasswordException
PDF sahaja untuk eksportLain SaveFormat nilai menghasilkan UnsupportedSaveFormatException
ReportLab diperlukan untuk PDFPasang pip install "aspose-note[pdf]" secara berasingan
GetPageHistory mengembalikan senarai satu unsurPenelusuran sejarah halaman penuh adalah stub; mengembalikan [page]
DetectLayoutChanges()Stub keserasian; tiada operasi

Petua dan Amalan Terbaik

  • Semak untuk None: Page.Title, Title.TitleText, OutlineElement.NumberList, dan kebanyakan medan metadata boleh menjadi None. Sentiasa lindungi dengan if x is not None atau if x sebelum mengakses ciri.
  • Gunakan GetChildNodes(Type) untuk carian rekursif dan bukannya mengulangi pokok secara manual. Ia mencari seluruh subpohon.
  • Iterasi anak langsung dengan for child in node apabila anda hanya memerlukan anak segera.
  • Tangani pengekodan pada Windows: Pada Windows, sys.stdout mungkin menggunakan halaman kod warisan. Tambah sys.stdout.reconfigure(encoding="utf-8", errors="replace") pada permulaan apabila mencetak teks Unicode.
  • Pasang [pdf] tambahan: Jangan import SaveFormat.Pdf fungsi tanpa memasang terlebih dahulu pip install "aspose-note[pdf]". Tanpa ReportLab, menyimpan ke PDF akan menyebabkan ralat import pada masa jalan.
 Bahasa Melayu