Imagens e arquivos anexados Aspose.Note FOSS para Python

Aspose.Note FOSS for Python gives direct access to both embedded images and attached files stored inside OneNote .one Este guia mostra como extrair bytes de imagem, inspecionar metadados de imágenes e salvar dados de arquivo anexado ao disco usando o Image e a) AttachedFile tipos de nó.


Extração de imagens

Cada imagem num documento do OneNote é representada por um símbolo de identificação. Image Nodo. Use GetChildNodes(Image) Para recuperar todas as imagens do documento de forma recursiva:

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

Propriedades da imagem

PropriedadeTipo de veículo:Descrição:
FileName`strNone`
BytesbytesDados de imagem em bruto (formato correspondente ao original, por exemplo PNG, JPEG)
Width`floatNone`
Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Tags do OneNote anexados a esta imagem

Salvar imagens com nomes de arquivo seguros

Quando ? FileName é: None ou contém caracteres que não são seguros para o sistema de ficheiros, limpar o nome antes de abrir um manuseio de arquivo:

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)

Extrair imagens por página

Iterar páginas com: GetChildNodes(Page) E chama-me. GetChildNodes(Image) em cada página para abranger a extração de imagens para slides individuais:

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)

Inspecionar imagem Alt Texto e hiperlinks

Leia o artigo 85.o. AlternativeTextTitle, AlternativeTextDescription, e HyperlinkUrl Propriedades de cada um dos Estados-Membros Image Nodo para aceder a metadados de acessibilidade e ligação dos alvos:

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)

Detectar formato de arquivo de imagem a partir de bytes

Python’s (Python) imghdr módulo (Python ≤ 3.12) ou o struct módulo pode detectar formato de imagem a partir dos primeiros bytes:

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)

Extrair arquivos anexados

Os anexos de ficheiros incorporados são armazenados como: AttachedFile Nomes. usar GetChildNodes(AttachedFile) para recuperar todos os anexos do documento e escrever cada arquivo de bytes em bruto no disco:

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

Propriedades do arquivo anexado

PropriedadeTipo de veículo:Descrição:
FileName`strNone`
BytesbytesConteúdo do ficheiro em bruto
Tagslist[NoteTag]Tags do OneNote anexados a este nó

Verifique as etiquetas nas imagens e anexos

Ambos. Image e a) AttachedFile Os nós suportam as etiquetas do OneNote. Iterar o .Tags lista em cada nó para ler o Label e marca de tempo de conclusão para cada etiqueta aplicada no documento-fonte:

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

Resumo: Imagem vs. AttachedFile

CaracterísticasImageAttachedFile
FileNameSim (nome da imagem original)Sim (nome do ficheiro original)
BytesBytes de imagem brutaBytes de arquivo bruto
Width / HeightSim (dimensões representadas)Não, não.
AlternativeTextTitle/Description- Sim , sim .Não, não.
HyperlinkUrl- Sim , sim .Não, não.
Tags- Sim , sim .- Sim , sim .
Replace(node) método de- Sim , sim .Não, não.

Dicas de trabalho

  • Sempre cuidado contra … None Nome dos ficheiros. img.FileName é: None quando o ficheiro não tinha nome no documento de origem.
  • img.Bytes Nunca é . None e é sempre o conteúdo binário bruto; pode ser zero bytes para imagens de marcador de lugar.
  • Utilização: Page.GetChildNodes(Image) em vez de: Document.GetChildNodes(Image) para ampliar a extracção numa única página.
  • A Comissão Image.Replace(image) método substitui o conteúdo de um nó imagem com outro em-memória; salvando para trás a .one não é suportado.

Ver também:

 Português