Bekerja dengan dokumen catatan

Pengelolaan Document class adalah akar dari Aspose.Catatan untuk model objek dokumen Python (DOM). Setiap membaca, pelacakan atau ekspor operasi dimulai dengan sebuah Document contoh yang mewakili satu kali .one bagian file.


Mengunggah Dokumen

Pemuatan dari jalur file

Pergilah ke jalur. .one langsung ke kantor pusat. Document Konstruksi:

from aspose.note import Document

doc = Document("MyNotes.one")

Beban dari aliran biner

Gunakan objek seperti file ketika data berasal dari respon jaringan, blob penyimpanan cloud, atau buffer in-memori:

from pathlib import Path
from aspose.note import Document

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

Buat dokumen kosong

Membangun sebuah Document tanpa argumen untuk membuat dokumen OneNote baru secara program:

from aspose.note import Document, Page

doc = Document()
doc.AppendChildLast(Page())

Pengecatan dengan opsi

Penggunaan LoadOptions untuk mengatur parameter opsional pada waktu beban:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # include page revision history in the DOM
doc = Document("MyNotes.one", opts)
LoadOptions propertiJenisDefault (Pengaturan default)Deskripsi
LoadHistoryboolFalseKapan? True, revisi riwayat halaman dimasukkan ke dalam DOM dan dapat diakses melalui Document.GetPageHistory
DocumentPassword`strNone`None

Deteksi Format Dokumen

Pengelolaan FileFormat properti mengidentifikasi varian format OneNote yang digunakan file:

from aspose.note import Document, FileFormat

doc = Document("MyNotes.one")

if doc.FileFormat == FileFormat.OneNote2010:
    print("OneNote 2010 format")
elif doc.FileFormat == FileFormat.OneNoteOnline:
    print("OneNote Online format")
elif doc.FileFormat == FileFormat.OneNote2007:
    print("OneNote 2007 format")
else:
    print("Format:", doc.FileFormat)
FileFormat nilaiDeskripsi
OneNote2010Standar .one file yang ditulis oleh OneNote 2010 dan versi terbaru
OneNoteOnline.one file yang ditulis oleh OneNote Online / Microsoft 365
OneNote2007Pusaka .one format dari OneNote 2007
UnknownFormat tidak dapat diidentifikasi

Halaman yang Berulang-ulang

Halaman adalah anak langsung dari Document.Gunakan sebuah for loop untuk iterasi sederhana:

from aspose.note import Document

doc = Document("MyNotes.one")

for page in doc:
    title_text = (
        page.Title.TitleText.Text
        if page.Title and page.Title.TitleText
        else "(untitled)"
    )
    author = page.Author or "(unknown)"
    level = page.Level or 1
    indent = "  " * (level - 1)
    print(f"{indent}{title_text}  [by {author}]")

Penggunaan GetChildNodes(Page) untuk mendapatkan daftar semua halaman yang diketik sekaligus:

from aspose.note import Document, Page

doc = Document("MyNotes.one")
pages = doc.GetChildNodes(Page)
print(f"Total pages: {len(pages)}")

Metadata halaman

PerumahanJenisDeskripsi
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`
IsConflictPageboolTrue jika halaman adalah salinan konflik sinkronisasi

Menjelajahi Pohon Dokumen

Document mewarisi dari CompositeNode, memberikan metode penjelajahan pohon penuh:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")

# Extract all plain text from the entire document
all_text = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print("\n".join(all_text))

Hierarki DOM:

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

Metode penjelajahan utama yang diwarisi dari CompositeNode:

MetodeDeskripsi
GetChildNodes(NodeType)Kembalikan daftar yang diketik dari semua keturunan yang cocok dengan tipe yang diberikan
AppendChildLast(node)Tambahkan node anak di akhir daftar anak-anak
AppendChildFirst(node)Tambahkan node anak di awal
InsertChild(index, node)Masukkan anak pada indeks tertentu
RemoveChild(node)Hapus node anak
GetEnumerator()Anak-anak langsung yang berulang

Sejarah halaman

Saat dimuat dengan LoadHistory=True, Document.GetPageHistory mengembalikan semua revisi yang disimpan dari satu halaman, diurutkan dari tertua sampai terbaru:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True
doc = Document("MyNotes.one")

for page in doc.GetChildNodes(None.__class__.__mro__[0]):  # iterate pages
    pass

# Get revisions for a specific page
import aspose.note as an

doc2 = Document("MyNotes.one", opts)
pages = doc2.GetChildNodes(an.Page)
if pages:
    history = doc2.GetPageHistory(pages[0])
    print(f"Revision count: {history.Count}")
    for rev in history:
        print(f"  Modified: {rev.LastModifiedTime}")

Catatan:: GetPageHistory mengembalikan kosong PageHistory objek ketika LoadHistory adalah: False (default) Selalu diatur opts.LoadHistory = True sebelum loading jika Anda perlu data revisi.


Menyimpan dan Mengekspor

Penggunaan Document.Save untuk mengekspor ke PDF. PDF adalah satu-satunya format ekspor yang didukung.

Simpan ke file

from aspose.note import Document, SaveFormat

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

Simpan ke in-memory stream

import io
from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, SaveFormat.Pdf)
pdf_bytes = buf.getvalue()

Simpan dengan opsi

Penggunaan PdfSaveOptions (dari aspose.note.saving) untuk mengontrol pemilihan halaman:

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

doc = Document("MyNotes.one")

# Export pages 2 and 3 only (zero-based index)
opts = PdfSaveOptions(PageIndex=1, PageCount=2)
buf = io.BytesIO()
doc.Save(buf, opts)
pdf_bytes = buf.getvalue()

Penting.: Ekspor PDF membutuhkan ketergantungan ReportLab opsional. Instal dengan: pip install "aspose-note[pdf]".


Mengidentifikasi Perubahan Tata Letak

Panggil. DetectLayoutChanges Setelah memodifikasi dokumen untuk menghitung kembali metrik tata letak sebelum disimpan:

from aspose.note import Document, Page

doc = Document()
page = Page()
doc.AppendChildLast(page)

# ... add content to page ...

doc.DetectLayoutChanges()
doc.Save("output.pdf")

Tips dan Praktik Terbaik

  • Load sekali, query berkali-kali: Document memuat seluruh .one file ke memori pada - Tunggu satu. Document contoh dan panggilan GetChildNodes berulang kali daripada Mengisi ulang file untuk setiap permintaan.
  • Periksa IsConflictPage: OneNote sync dapat menghasilkan halaman yang berkonflik. Filter dengan [p for p in doc if not p.IsConflictPage] sebelum memproses konten.
  • Penggunaan LoadHistory=False (default) untuk kecepatan: Sejarah halaman menambahkan memori yang signifikan dan Parse overhead. hanya set LoadHistory=True ketika Anda secara eksplisit membutuhkan data revisi.
  • Streaming untuk file besar: Melewatkan objek file terbuka bukan string path saat membaca besar .one file untuk menghindari menjaga file terbuka setelah parse selesai.
  • Panggil. DetectLayoutChanges sebelum Save: Saat membangun dokumen secara programatis dan node yang melekat, panggilan DetectLayoutChanges() untuk memastikan koordinat tata letak adalah konsisten sebelum diekspor ke PDF.

Masalah Umum

IsuPenyebabnyaPerbaiki
IncorrectPasswordException pada bebanFile terenkripsi; dokumen yang terencrit tidak didukungDapatkan salinan file yang tidak terenkripsi
FileCorruptedException pada bebanFile dipotong atau memiliki format internal yang tidak didukungMemeriksa file adalah valid .one bagian (bukan sebuah .onetoc2 tabel isi)
UnsupportedSaveFormatException pada saveMencoba menyimpan ke format lain selain PDFHanya SaveFormat.Pdf didukung untuk ekspor
kosong GetPageHistory hasilLoadOptions.LoadHistory tidak diatur untuk True sebelum pengisianMengisi ulang dokumen dengan opts.LoadHistory = True
ModuleNotFoundError: reportlabEkspor PDF dicoba tanpa tambahan PDFBerlarilah ! pip install "aspose-note[pdf]"

FAQ

Format OneNote apa yang bisa Aspose.Nota dibaca?

Semua tiga format bagian OneNote: OneNote2007, OneNote2010, dan OneNoteOnline. Penggunaan doc.FileFormat untuk mengidentifikasi varian yang dimuat.

Bisakah aku menulis kembali ke … .one file setelah membacanya?

Tidak. aku menulis kembali ke .one tidak diimplementasikan. Ekspor ke PDF dengan Document.Save adalah hanya mendukung operasi output.

Bagaimana saya membaca halaman tertentu dengan judul?

Mengulang halaman dan membandingkan page.Title.TitleText.Text ke string target Anda:

from aspose.note import Document

doc = Document("MyNotes.one")
target = next(
    (p for p in doc
     if p.Title and p.Title.TitleText and p.Title.TitleText.Text == "My Page"),
    None,
)

Bagaimana saya menghitung sub-halaman terpisah dari halaman tingkat atas?

Penggunaan page.Level: level 1 adalah top-level, level 2 adalah subpage, dan seterusnya.

from aspose.note import Document

doc = Document("MyNotes.one")
top_level = [p for p in doc if (p.Level or 1) == 1]
sub_pages  = [p for p in doc if (p.Level or 1) > 1]
print(f"Top-level: {len(top_level)}, Sub-pages: {len(sub_pages)}")

Apakah Bertujuan.Catatan dukungan .onetoc2 file tabel isi?

Tidak, hanya… .one file bagian didukung. .onetoc2 notebook akan meningkatkan FileCorruptedException.


Ringkasan Referensi API

Kelas / MetodeDeskripsi
Document(path_or_stream, options?)Pemuatan a .one file atau membuat dokumen kosong
Document.FileFormatVarian format terdeteksi (FileFormat enum) adalah:
Document.GetChildNodes(NodeType)Dapatkan semua node keturunan dari tipe tertentu
Document.GetPageHistory(page)Dapatkan riwayat revisi untuk halaman (perlu) LoadHistory=True)
Document.Save(target, format_or_options)Ekspor ke PDF dengan jalur file atau aliran
Document.DetectLayoutChanges()Menghitung kembali metrik tata letak setelah pengeditan programatis
Document.Accept(visitor)Pergi DOM menggunakan a DocumentVisitor subkelas
LoadOptions.LoadHistoryDiset ke True untuk memasukkan revisi halaman ke dalam DOM
LoadOptions.DocumentPasswordReserved; file terenkripsi mengangkat IncorrectPasswordException
FileFormatEnum: OneNote2010, OneNoteOnline, OneNote2007, Unknown
SaveFormat.PdfFormat ekspor yang hanya didukung
PageHistory.CountJumlah revisi halaman yang tersedia
Page.LevelKecepatan pengisian data (Kode: C)
Page.IsConflictPageTrue untuk salinan konflik sinkronisasi

Lihat Juga

 Bahasa Indonesia