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-noteUntuk 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.FileFormatmenyediakan 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.LoadHistorybendera 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; mendedahkanDisplayName,CreationTime,FileFormatPage: anak langsung kepadaDocument; mendedahkanTitle,Author,CreationTime,LastModifiedTime,LevelTitle: mendedahkanTitleText,TitleDate,TitleTime(semuaRichTextnod)Outline: kontena kedudukan denganHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: kontena daun; mendedahkanNumberList
Kaedah navigasi pada CompositeNode:
| Kaedah / Harta | Keterangan |
|---|---|
FirstChild, LastChild | Akses 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 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}")Pengekstrakan Kandungan Teks Kaya
RichText nod mendedahkan:
Text: str: rentetan teks biasa penuhTextRuns: list[TextRun]: senarai segmen terformatTags: list[NoteTag]: tag OneNote yang dilampirkan pada blok iniAppend(text, style=None): tambahkan rentetan teks dalam memoriReplace(old_value, new_value): penggantian rentetan dalam memori
Setiap TextRun membawa:
| Sifat | Jenis | Deskripsi |
|---|---|---|
Text | str | Teks segmen |
Style | TextStyle | Metadata pemformatan |
TextStyle ciri-ciri:
| Sifat | Jenis |
|---|---|
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 Imej
Image nod mendedahkan bait mentah dan metadata untuk setiap imej terbenam:
| Sifat | Jenis | Keterangan |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Data imej mentah |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[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:
| Sifat | Jenis | Deskripsi |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Data fail mentah |
Tags | list[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:
| Kelas | Sifat Utama |
|---|---|
Table | Columns: list[TableColumn] (setiap TableColumn mempunyai .Width dan .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Ulang sel melalui GetChildNodes(TableCell) |
TableCell | Mengandungi 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:
| Sifat | Jenis | Keterangan |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
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:
| Sifat | Jenis | Keterangan |
|---|---|---|
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 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
| Pilihan | Jenis | Deskripsi |
|---|---|---|
PageIndex | int | Medan wujud; tidak dihantar ke pengeksport PDF dalam v26.3.1 (tiada kesan) |
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()Rujukan Format dan Enum
SaveFormat
| Nilai | Status |
|---|---|
SaveFormat.Pdf | Dilaksanakan (memerlukan ReportLab) |
FileFormat
Document.FileFormat menyediakan indikasi usaha terbaik bagi versi format fail OneNote. Enum ini mengisytiharkan 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
Sekatan Semasa
| Had | Butiran |
|---|---|
| Baca-sahaja | Menulis kembali ke .one format tidak dilaksanakan |
| Tiada penyulitan | Dokumen yang disulitkan menghasilkan IncorrectPasswordException |
| PDF sahaja untuk eksport | Lain SaveFormat nilai menghasilkan UnsupportedSaveFormatException |
| ReportLab diperlukan untuk PDF | Pasang pip install "aspose-note[pdf]" secara berasingan |
GetPageHistory mengembalikan senarai satu unsur | Penelusuran 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 menjadiNone. Sentiasa lindungi denganif x is not Noneatauif xsebelum 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 nodeapabila anda hanya memerlukan anak segera. - Tangani pengekodan pada Windows: Pada Windows,
sys.stdoutmungkin menggunakan halaman kod warisan. Tambahsys.stdout.reconfigure(encoding="utf-8", errors="replace")pada permulaan apabila mencetak teks Unicode. - Pasang
[pdf]tambahan: Jangan importSaveFormat.Pdffungsi tanpa memasang terlebih dahulupip install "aspose-note[pdf]". Tanpa ReportLab, menyimpan ke PDF akan menyebabkan ralat import pada masa jalan.