Imej dan Fail Dilampirkan — Aspose.Note FOSS untuk Python

Aspose.Note FOSS for Python gives direct access to both embedded images and attached files stored inside OneNote .one fail seksyen. Kandungan didedahkan melalui the Image dan AttachedFile jenis nod.


Mengekstrak Imej

Setiap imej dalam dokumen OneNote diwakili oleh Image nod. Gunakan GetChildNodes(Image) untuk mendapatkan semua imej daripada dokumen secara rekursif:

from aspose.note import Document, Image

doc = Document("MyNotes.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)")

Sifat Imej

SifatJenisKeterangan
FileName`strNone`
BytesbytesData imej mentah (format sepadan dengan asal, contohnya PNG, JPEG)
Width`floatNone`
Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Tag OneNote yang dilampirkan pada imej ini

Simpan Imej dengan Nama Fail Selamat

Apabila FileName adalah None atau mengandungi aksara yang tidak selamat untuk sistem fail, bersihkan sebelum menyimpan:

import re
from aspose.note import Document, Image

def safe_name(name: str | None, fallback: str) -> str:
    if not name:
        return fallback
    return re.sub(r'[<>:"/\\|?*]', "_", name)

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

Mengekstrak Imej Per Halaman

from aspose.note import Document, Page, Image

doc = Document("MyNotes.one")
for page_num, page in enumerate(doc.GetChildNodes(Page), start=1):
    images = page.GetChildNodes(Image)
    print(f"Page {page_num}: {len(images)} image(s)")
    for i, img in enumerate(images, start=1):
        filename = f"page{page_num}_img{i}.bin"
        with open(filename, "wb") as f:
            f.write(img.Bytes)

Periksa Teks Alt Imej dan Pautan Hiper

from aspose.note import Document, Image

doc = Document("MyNotes.one")
for img in doc.GetChildNodes(Image):
    if img.AlternativeTextTitle:
        print("Alt title:", img.AlternativeTextTitle)
    if img.AlternativeTextDescription:
        print("Alt desc:", img.AlternativeTextDescription)
    if img.HyperlinkUrl:
        print("Linked to:", img.HyperlinkUrl)

Kesan Format Fail Imej daripada Bait

Python’s imghdr modul (Python ≤ 3.12) atau struct modul dapat mengesan format imej daripada bait pertama:

from aspose.note import Document, Image

doc = Document("MyNotes.one")
for img in doc.GetChildNodes(Image):
    b = img.Bytes
    if b[:4] == b'\x89PNG':
        fmt = "png"
    elif b[:2] == b'\xff\xd8':
        fmt = "jpeg"
    elif b[:4] == b'GIF8':
        fmt = "gif"
    elif b[:2] in (b'BM',):
        fmt = "bmp"
    else:
        fmt = "bin"
    name = (img.FileName or f"image.{fmt}").rsplit(".", 1)[0] + f".{fmt}"
    with open(name, "wb") as f:
        f.write(b)

Mengekstrak Fail Lampiran

Lampiran fail terbenam disimpan sebagai AttachedFile nod:

from aspose.note import Document, AttachedFile

doc = Document("NotesWithAttachments.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)
    print(f"Saved attachment: {filename}  ({len(af.Bytes):,} bytes)")

Sifat AttachedFile

SifatJenisKeterangan
FileName`strNone`
BytesbytesKandungan fail mentah
Tagslist[NoteTag]Tag OneNote yang dilampirkan pada nod ini

Periksa Tag pada Imej dan Lampiran

Kedua-dua Image dan AttachedFile nod menyokong tag OneNote:

from aspose.note import Document, Image, AttachedFile

doc = Document("MyNotes.one")

for img in doc.GetChildNodes(Image):
    for tag in img.Tags:
        print(f"Image tag: {tag.Label}  completedTime={tag.CompletedTime}")

for af in doc.GetChildNodes(AttachedFile):
    for tag in af.Tags:
        print(f"Attachment tag: {tag.Label}  completedTime={tag.CompletedTime}")

Ringkasan: Image vs AttachedFile

CiriImageAttachedFile
FileNameYa (nama imej asal)Ya (nama fail asal)
BytesByte imej mentahByte fail mentah
Width / HeightYa (dimensi terrender)Tidak
AlternativeTextTitle/DescriptionYaTidak
HyperlinkUrlYaTidak
TagsYaYa
Replace(node) kaedahYaTidak

Petua

  • Sentiasa berjaga-jaga terhadap None nama fail. img.FileName adalah None apabila fail tidak mempunyai nama dalam dokumen sumber.
  • img.Bytes tidak pernah None dan sentiasa merupakan kandungan binari mentah; ia boleh menjadi sifar bait untuk imej pemegang tempat.
  • Gunakan Page.GetChildNodes(Image) daripada Document.GetChildNodes(Image) untuk mengehadkan pengekstrakan kepada satu halaman.
  • Yang Image.Replace(image) kaedah menggantikan kandungan satu nod imej dengan yang lain dalam memori; menyimpan kembali ke .one tidak disokong.

Lihat Juga

 Bahasa Melayu