Gambaran Fitur — 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 file bagian dan mengekspornya ke PDF. Semua fitur yang tercantum di bawah ini telah diverifikasi terhadap kode sumber repositori, README, dan skrip contoh.

Instalasi dan Penyiapan

Instal dari PyPI:

pip install aspose-note

Untuk dukungan ekspor PDF (memerlukan ReportLab):

pip install "aspose-note[pdf]"

Persyaratan: Python 3.10 atau lebih baru. Tidak memerlukan instalasi Microsoft Office.


Fitur dan Kapabilitas

.Memuat File .one

Muat file bagian Microsoft OneNote dari jalur file atau aliran biner apa pun (handle file, io.BytesIO, badan respons HTTP, aliran penyimpanan cloud).

  • Document.FileFormat menyediakan indikasi sebaik mungkin tentang versi format file OneNote (OneNote2010, OneNoteOnline, atau OneNote2007)
  • Pemuat berbasis aliran menghilangkan I/O disk untuk alur kerja dalam memori atau jaringan
  • LoadOptions.LoadHistory bendera mengontrol apakah riwayat halaman termasuk 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 lengkap diekspos sebagai pohon objek Python yang bertipe. Setiap node mewarisi dari Node atau CompositeNode:

  • Document: root; mengekspos DisplayName, CreationTime, FileFormat
  • Page: anak langsung dari Document; mengekspos Title, Author, CreationTime, LastModifiedTime, Level
  • Title: mengekspos TitleText, TitleDate, TitleTime (semua RichText node)
  • Outline: kontainer posisional dengan HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: kontainer daun; mengekspos NumberList

Metode navigasi pada CompositeNode:

Metode / PropertiDeskripsi
FirstChild, LastChildAkses anak langsung
GetChildNodes(Type)Pencarian rekursif, difilter berdasarkan tipe
AppendChildLast(node)Tambahkan anak di akhir
AppendChildFirst(node)Tambahkan anak di awal
InsertChild(index, node)Sisipkan pada posisi
RemoveChild(node)Hapus 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}")

Ekstraksi Konten Teks Kaya

RichText node menampilkan:

  • Text: str: string teks polos lengkap
  • TextRuns: list[TextRun]: daftar segmen terformat
  • Tags: list[NoteTag]: tag OneNote yang terlampir pada blok ini
  • Append(text, style=None): menambahkan urutan teks dalam memori
  • Replace(old_value, new_value): substitusi string dalam memori

Setiap TextRun membawa:

PropertiTipeDeskripsi
TextstrTeks segmen
StyleTextStyleMetadata pemformatan

TextStyle properti:

PropertiTipe
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 Gambar

Image nodes menampilkan byte mentah dan metadata untuk setiap gambar yang disematkan:

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

Ekstraksi File Terlampir

AttachedFile node menampilkan lampiran file tersemat:

PropertiTipeDeskripsi
FileName`strNone`
BytesbytesData file mentah
Tagslist[NoteTag]Tag OneNote terlampir
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 Tabel

Table, TableRow, dan TableCell menampilkan struktur tabel lengkap:

KelasProperti Kunci
TableColumns: list[TableColumn] (setiap TableColumn memiliki .Width dan .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowIterasi sel melalui GetChildNodes(TableCell)
TableCellBerisi RichText, Image, dan node konten lainnya
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)

Inspeksi Tag OneNote

NoteTag muncul pada RichText, Image, AttachedFile, dan Table node melalui .Tags properti. OutlineElement tidak memiliki .Tags properti. NoteTag properti:

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

Metode pabrik: NoteTag.CreateYellowStar() membuat node tag bintang kuning standar.

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

Dukungan Daftar Bernomor

OutlineElement.NumberList mengekspos:

PropertiTipeDeskripsi
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 pola pengunjung untuk penelusuran dokumen penuh yang terstruktur. Timpa apa pun VisitXxxStart / VisitXxxEnd metode untuk menyaring tipe node 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}")

Ekspor PDF

Simpan dokumen yang dimuat ke PDF menggunakan Document.Save(). Didukung melalui backend ReportLab opsional.

from aspose.note import Document, SaveFormat

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

PdfSaveOptions

OpsiTipeDeskripsi
PageIndexintBidang ada; tidak diteruskan ke pengekspor PDF pada v26.3.1 (tidak berpengaruh)
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()

Referensi Format dan Enum

SaveFormat

NilaiStatus
SaveFormat.PdfDiimplementasikan (memerlukan ReportLab)

FileFormat

Document.FileFormat menyediakan indikasi upaya terbaik tentang versi format file OneNote. Enum ini mendeklarasikan 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


Batasan Saat Ini

BatasanDetail
Hanya-bacaMenulis kembali ke .one format belum diimplementasikan
Tidak ada enkripsiMenaikkan dokumen terenkripsi IncorrectPasswordException
PDF hanya untuk eksporLainnya SaveFormat Menaikkan nilai UnsupportedSaveFormatException
ReportLab diperlukan untuk PDFInstal pip install "aspose-note[pdf]" terpisah
GetPageHistory mengembalikan daftar satu elemenPenelusuran riwayat halaman penuh adalah stub; mengembalikan [page]
DetectLayoutChanges()Stub kompatibilitas; tidak ada operasi

Tips dan Praktik Terbaik

  • Periksa None: Page.Title, Title.TitleText, OutlineElement.NumberList, dan sebagian besar bidang metadata dapat None. Selalu lindungi dengan if x is not None atau if x sebelum mengakses properti.
  • Gunakan GetChildNodes(Type) untuk pencarian rekursif daripada menelusuri pohon secara manual. Ini mencari seluruh subpohon.
  • Iterasi anak langsung dengan for child in node ketika Anda hanya membutuhkan anak langsung.
  • Tangani enkoding di Windows: Di Windows, sys.stdout mungkin menggunakan halaman kode lama. Tambahkan sys.stdout.reconfigure(encoding="utf-8", errors="replace") pada saat startup ketika mencetak teks Unicode.
  • Instal [pdf] tambahan: Jangan mengimpor SaveFormat.Pdf fungsionalitas tanpa terlebih dahulu menginstal pip install "aspose-note[pdf]". Tanpa ReportLab, menyimpan ke PDF akan memunculkan kesalahan impor pada waktu berjalan.
 Bahasa Indonesia