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