Images et fichiers joints — Aspose.Note FOSS pour Python

Aspose.Note FOSS for Python gives direct access to both embedded images and attached files stored inside OneNote .one fichiers de section. Le contenu est exposé via le Image et AttachedFile types de nœuds.


Extraction d’images

Chaque image dans un document OneNote est représentée par un Image nœud. Utilisez GetChildNodes(Image) pour récupérer toutes les images du document de manière récursive :

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

Propriétés de l’image

PropriétéTypeDescription
FileName`strNone`
BytesbytesDonnées d’image brutes (le format correspond à l’original, par ex. PNG, JPEG)
Width`floatNone`
Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Étiquettes OneNote attachées à cette image

Enregistrer les images avec des noms de fichiers sûrs

Quand FileName est None ou contient des caractères dangereux pour le système de fichiers, désinfectez avant d’enregistrer :

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)

Extraire les images par page

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)

Inspecter le texte alternatif et les hyperliens des images

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)

Détecter le format de fichier image à partir des octets

Python’s imghdr module (Python ≤ 3.12) ou le struct Le module peut détecter le format d’image à partir des premiers octets :

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)

Extraction des fichiers joints

Les pièces jointes de fichiers intégrés sont stockées en tant que AttachedFile nœuds :

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

Propriétés de AttachedFile

PropriétéTypeDescription
FileName`strNone`
BytesbytesContenu brut du fichier
Tagslist[NoteTag]Étiquettes OneNote attachées à ce nœud

Inspecter les balises sur les images et les pièces jointes

Les deux Image et AttachedFile les nœuds prennent en charge les balises 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}")

Résumé : Image vs AttachedFile

FonctionnalitéImageAttachedFile
FileNameOui (nom d’image original)Oui (nom de fichier original)
BytesOctets bruts d’imageOctets bruts du fichier
Width / HeightOui (dimensions rendues)Non
AlternativeTextTitle/DescriptionOuiNon
HyperlinkUrlOuiNon
TagsOuiOui
Replace(node) méthodeOuiNon

Conseils

  • Soyez toujours vigilant contre None noms de fichiers. img.FileName est None lorsque le fichier n’avait pas de nom dans le document source.
  • img.Bytes n’est jamais None et est toujours le contenu binaire brut ; il peut être de zéro octet pour les images de substitution.
  • Utilisez Page.GetChildNodes(Image) au lieu de Document.GetChildNodes(Image) pour limiter l’extraction à une seule page.
  • Le Image.Replace(image) la méthode remplace le contenu d’un nœud d’image par un autre en mémoire ; l’enregistrement vers .one n’est pas pris en charge.

Voir aussi

 Français