Bilder und angehängte Dateien — Aspose.Note FOSS für Python

Aspose.Note FOSS for Python gives direct access to both embedded images and attached files stored inside OneNote .one Abschnittsdateien. Inhalte werden über die Image und AttachedFile Knotentypen.


Bilder extrahieren

Jedes Bild in einem OneNote-Dokument wird durch einen Image Knoten dargestellt. Verwenden Sie GetChildNodes(Image) um alle Bilder aus dem Dokument rekursiv abzurufen:

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

Bildeigenschaften

EigenschaftTypBeschreibung
FileName`strNone`
BytesbytesRohbilddaten (Format entspricht dem Original, z. B. PNG, JPEG)
Width`floatNone`
Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]OneNote-Tags, die an diesem Bild angehängt sind

Bilder mit sicheren Dateinamen speichern

Wann FileName ist None oder enthält Zeichen, die für das Dateisystem unsicher sind, bereinigen Sie vor dem Speichern:

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)

Bilder pro Seite extrahieren

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)

Alt-Text und Hyperlinks von Bildern prüfen

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)

Bilddateiformat aus Bytes erkennen

Python’s imghdr Modul (Python ≤ 3.12) oder das struct Modul kann das Bildformat anhand der ersten Bytes erkennen:

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)

Angehängte Dateien extrahieren

Eingebettete Dateianhänge werden gespeichert als AttachedFile Knoten:

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

Eigenschaften von AttachedFile

EigenschaftTypBeschreibung
FileName`strNone`
BytesbytesRohdateiinhalt
Tagslist[NoteTag]OneNote-Tags, die an diesem Knoten angehängt sind

Tags bei Bildern und Anhängen prüfen

Beide Image und AttachedFile Knoten unterstützen OneNote-Tags:

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

Zusammenfassung: Image vs AttachedFile

FunktionImageAttachedFile
FileNameJa (ursprünglicher Bildname)Ja (ursprünglicher Dateiname)
BytesRoh-BildbytesRoh-Dateibytes
Width / HeightJa (gerenderte Abmessungen)Nein
AlternativeTextTitle/DescriptionJaNein
HyperlinkUrlJaNein
TagsJaJa
Replace(node) MethodeJaNein

Tipps

  • Schütze dich immer vor None Dateinamen. img.FileName ist None wenn die Datei im Quelldokument keinen Namen hatte.
  • img.Bytes ist nie None und ist immer der rohe Binärinhalt; er kann null Bytes für Platzhalterbilder sein.
  • Verwenden Page.GetChildNodes(Image) statt Document.GetChildNodes(Image) um die Extraktion auf eine einzelne Seite zu beschränken.
  • Der Image.Replace(image) Methode ersetzt den Inhalt eines Bildknotens durch einen anderen im Speicher; das Zurückspeichern nach .one wird nicht unterstützt.

Siehe auch

 Deutsch