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-noteUntuk 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.FileFormatmenyediakan 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.LoadHistorybendera 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; mengeksposDisplayName,CreationTime,FileFormatPage: anak langsung dariDocument; mengeksposTitle,Author,CreationTime,LastModifiedTime,LevelTitle: mengeksposTitleText,TitleDate,TitleTime(semuaRichTextnode)Outline: kontainer posisional denganHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: kontainer daun; mengeksposNumberList
Metode navigasi pada CompositeNode:
| Metode / Properti | Deskripsi |
|---|---|
FirstChild, LastChild | Akses 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 node | Iterasi 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 lengkapTextRuns: list[TextRun]: daftar segmen terformatTags: list[NoteTag]: tag OneNote yang terlampir pada blok iniAppend(text, style=None): menambahkan urutan teks dalam memoriReplace(old_value, new_value): substitusi string dalam memori
Setiap TextRun membawa:
| Properti | Tipe | Deskripsi |
|---|---|---|
Text | str | Teks segmen |
Style | TextStyle | Metadata pemformatan |
TextStyle properti:
| Properti | Tipe |
|---|---|
IsBold, IsItalic, IsUnderline, IsStrikethrough | bool |
IsSuperscript, IsSubscript | bool |
FontName | `str |
FontSize | `float |
FontColor, Highlight | `int |
Language | `int |
IsHyperlink | bool |
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:
| Properti | Tipe | Deskripsi |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Data gambar mentah |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[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:
| Properti | Tipe | Deskripsi |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Data file mentah |
Tags | list[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:
| Kelas | Properti Kunci |
|---|---|
Table | Columns: list[TableColumn] (setiap TableColumn memiliki .Width dan .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Iterasi sel melalui GetChildNodes(TableCell) |
TableCell | Berisi 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:
| Properti | Tipe | Deskripsi |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
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:
| Properti | Tipe | Deskripsi |
|---|---|---|
Format | `str | None` |
Restart | `int | None` |
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
| Opsi | Tipe | Deskripsi |
|---|---|---|
PageIndex | int | Bidang ada; tidak diteruskan ke pengekspor PDF pada v26.3.1 (tidak berpengaruh) |
PageCount | `int | None` |
ImageCompression | `Any | None` |
JpegQuality | `int | None` |
PageSettings | `Any | None` |
PageSplittingAlgorithm | `Any | None` |
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
| Nilai | Status |
|---|---|
SaveFormat.Pdf | Diimplementasikan (memerlukan ReportLab) |
FileFormat
Document.FileFormat menyediakan indikasi upaya terbaik tentang versi format file OneNote. Enum ini mendeklarasikan tiga nilai:
| Nilai | Deskripsi |
|---|---|
FileFormat.OneNote2010 | Format OneNote 2010 |
FileFormat.OneNoteOnline | Format OneNote Online |
FileFormat.OneNote2007 | Format 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
| Batasan | Detail |
|---|---|
| Hanya-baca | Menulis kembali ke .one format belum diimplementasikan |
| Tidak ada enkripsi | Menaikkan dokumen terenkripsi IncorrectPasswordException |
| PDF hanya untuk ekspor | Lainnya SaveFormat Menaikkan nilai UnsupportedSaveFormatException |
| ReportLab diperlukan untuk PDF | Instal pip install "aspose-note[pdf]" terpisah |
GetPageHistory mengembalikan daftar satu elemen | Penelusuran 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 dapatNone. Selalu lindungi denganif x is not Noneatauif xsebelum mengakses properti. - Gunakan
GetChildNodes(Type)untuk pencarian rekursif daripada menelusuri pohon secara manual. Ini mencari seluruh subpohon. - Iterasi anak langsung dengan
for child in nodeketika Anda hanya membutuhkan anak langsung. - Tangani enkoding di Windows: Di Windows,
sys.stdoutmungkin menggunakan halaman kode lama. Tambahkansys.stdout.reconfigure(encoding="utf-8", errors="replace")pada saat startup ketika mencetak teks Unicode. - Instal
[pdf]tambahan: Jangan mengimporSaveFormat.Pdffungsionalitas tanpa terlebih dahulu menginstalpip install "aspose-note[pdf]". Tanpa ReportLab, menyimpan ke PDF akan memunculkan kesalahan impor pada waktu berjalan.