Panduan Pembangun

Aspose.Note FOSS for Python adalah perpustakaan percuma, sumber terbuka untuk membaca fail bahagian Microsoft OneNote .one tanpa sebarang kebergantungan pada Microsoft Office. Ia menyediakan API awam yang bersih di bawah pakej aspose.note, yang dimodelkan mengikut antara muka Aspose.Note untuk .NET. Perpustakaan ini sesuai untuk automasi dokumen, pengindeksan kandungan, saluran pengekstrakan data, dan aliran kerja arkib.

Panduan pembangun ini merangkumi keseluruhan permukaan API awam yang tersedia dalam versi 26.3.1, dengan contoh kod yang boleh dijalankan untuk setiap ciri utama.

Memuat Dokumen

Muatkan fail .one dari laluan fail atau aliran binari. Kelas Document adalah titik masuk untuk semua operasi.

Muat dari laluan fail

from aspose.note import Document

doc = Document("MyNotes.one")

Muat dari aliran binari

Berguna apabila membaca dari storan awan, respons HTTP, atau penampan dalam memori:

from pathlib import Path
from aspose.note import Document

with Path("MyNotes.one").open("rb") as f:
    doc = Document(f)

Pilihan Muat

Gunakan LoadOptions untuk menetapkan parameter pilihan semasa masa muat:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # Include page history in the DOM
doc = Document("MyNotes.one", opts)

Nota: DocumentPassword wujud pada LoadOptions untuk keserasian API, tetapi dokumen yang dienkripsi tidak disokong. Mencuba memuatkan fail yang dienkripsi akan menyebabkan IncorrectPasswordException.


Struktur Dokumen (DOM)

Model dokumen OneNote ialah pokok:

Document
  └── Page (0..n)
        ├── Title
        │     ├── TitleText (RichText)
        │     ├── TitleDate (RichText)
        │     └── TitleTime (RichText)
        └── Outline (0..n)
              └── OutlineElement (0..n)
                    ├── RichText
                    ├── Image
                    ├── Table
                    │     └── TableRow
                    │           └── TableCell
                    │                 └── RichText / Image
                    └── AttachedFile

Setiap nod mendedahkan ParentNode dan sifat Document yang berjalan ke atas ke akar. Nod komposit menyokong iterasi anak, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild, dan GetChildNodes(Type).


Mengiterasi Halaman

Halaman adalah anak langsung Document. Iterasi mereka secara langsung atau gunakan GetChildNodes:

from aspose.note import Document, Page

doc = Document("MyNotes.one")

for page in doc:
    title = page.Title.TitleText.Text if page.Title and page.Title.TitleText else "(untitled)"
    author = page.Author or "(unknown)"
    print(f"  {title}  [by {author}]")

Metadata halaman:

SifatJenisKeterangan
TitleTitle | NoneBlok tajuk halaman
Authorstr | NoneRentetan pengarang
CreationTimedatetime | NoneMasa penciptaan halaman
LastModifiedTimedatetime | NoneMasa pengubahsuaian terakhir
Levelint | NoneTahap inden subhalaman

Ekstraksi Teks

Ekstrak semua teks biasa

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
all_text = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print("\n".join(all_text))

Periksa jalur pemformatan

Setiap RichText mengandungi senarai segmen TextRun. Setiap run membawa TextStylenya sendiri:

from aspose.note import Document, RichText

doc = Document("FormattedNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        style = run.Style
        flags = []
        if style.IsBold: flags.append("bold")
        if style.IsItalic: flags.append("italic")
        if style.IsHyperlink: flags.append(f"link={style.HyperlinkAddress}")
        print(f"{run.Text!r:40s} [{', '.join(flags)}]")

Ekstrak pautan hiperteks

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
            print(run.Text, "->", run.Style.HyperlinkAddress)

Ekstraksi Imej

from aspose.note import Document, Image

doc = Document("MyNotes.one")
for i, img in enumerate(doc.GetChildNodes(Image), start=1):
    name = img.FileName or f"image_{i}.bin"
    with open(name, "wb") as f:
        f.write(img.Bytes)
    print(f"Saved {name}  ({img.Width}x{img.Height})")

Ciri-ciri imej: FileName, Bytes, Width, Height, AlternativeTextTitle, AlternativeTextDescription, HyperlinkUrl, Tags.


Penguraian Jadual

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.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)
        row_text = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in cells
        ]
        print(f"Row {r}:", row_text)

Fail Dilampirkan

from aspose.note import Document, AttachedFile

doc = Document("NotesWithAttachments.one")
for i, af in enumerate(doc.GetChildNodes(AttachedFile), start=1):
    name = af.FileName or f"attachment_{i}.bin"
    with open(name, "wb") as f:
        f.write(af.Bytes)
    print(f"Saved: {name}")

Tag dan Senarai Bernombor

Periksa item NoteTag

from aspose.note import Document, RichText, Image, Table

doc = Document("TaggedNotes.one")
for rt in doc.GetChildNodes(RichText):
    for tag in rt.Tags:
        print(f"RichText tag: {tag.Label} icon={tag.Icon}")
for img in doc.GetChildNodes(Image):
    for tag in img.Tags:
        print(f"Image tag: {tag.Label}")

Semak senarai bernombor

from aspose.note import Document, OutlineElement

doc = Document("NumberedNotes.one")
for oe in doc.GetChildNodes(OutlineElement):
    nl = oe.NumberList
    if nl:
        print(f"format={nl.Format!r}")

Corak DocumentVisitor

Gunakan DocumentVisitor untuk melaksanakan pelawat yang melintasi seluruh pokok dokumen:

from aspose.note import Document, DocumentVisitor, Page, RichText, Image

class ContentCounter(DocumentVisitor):
    def __init__(self):
        self.pages = 0
        self.texts = 0
        self.images = 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("MyNotes.one")
counter = ContentCounter()
doc.Accept(counter)
print(f"Pages: {counter.pages}, Texts: {counter.texts}, Images: {counter.images}")

Eksport PDF

Eksport PDF memerlukan kebergantungan ReportLab pilihan. Pasang ia dengan:

pip install "aspose-note[pdf]"

Eksport PDF Asas

from aspose.note import Document, SaveFormat

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

Eksport PDF dengan pilihan

import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions

doc = Document("MyNotes.one")

##With save options
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)

##Save to in-memory stream
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()

Nota: PdfSaveOptions.PageIndex dan PageCount wujud tetapi tidak dihantar ke pengekspor PDF dalam v26.3.1. Seluruh dokumen sentiasa dieksport.


Had Semasa

AreaStatus
Membaca fail .oneDisokong sepenuhnya
Eksport PDF (melalui ReportLab)Disokong
Menulis kembali ke .oneTidak dilaksanakan
Dokumen terenkripsiTidak disokong (menimbulkan IncorrectPasswordException)
Format simpan HTML / imej / ONEDinyatakan untuk keserasian API; menimbulkan UnsupportedSaveFormatException

Panduan Tersedia


Lihat Juga

 Bahasa Melayu