Spaces:
Sleeping
Sleeping
File size: 1,932 Bytes
5240148 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | """
Formatadores de imagens.
"""
from io import BytesIO
from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from typing import Dict, Any, Optional
def inserir_imagem_de_documento(
doc: Document,
imagem_data: Optional[Dict[str, Any]],
largura_inches: float = 5.5
) -> bool:
"""
Insere uma imagem extraída de outro documento.
Args:
doc: Documento destino
imagem_data: Dict com 'paragraph_element' e 'doc' (documento origem)
largura_inches: Largura da imagem
Returns:
True se inseriu com sucesso, False caso contrário
"""
if not imagem_data:
return False
try:
para_elem = imagem_data['paragraph_element']
doc_origem = imagem_data['doc']
ns_a = '{http://schemas.openxmlformats.org/drawingml/2006/main}'
ns_r = '{http://schemas.openxmlformats.org/officeDocument/2006/relationships}'
for blip in para_elem.iter(f'{ns_a}blip'):
embed_id = blip.get(f'{ns_r}embed')
if embed_id:
try:
image_part = doc_origem.part.related_parts[embed_id]
image_stream = BytesIO(image_part.blob)
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run()
run.add_picture(image_stream, width=Inches(largura_inches))
return True
except Exception as e:
print(f"Erro ao copiar imagem: {e}")
return False
except Exception as e:
print(f"Erro ao processar imagem: {e}")
return False
return False
def add_image_placeholder(doc: Document) -> None:
"""Adiciona placeholder de imagem."""
p = doc.add_paragraph()
p.add_run("[IMAGEM]").italic = True
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|