PPTX: criação, edição e análise
Visão Geral
Um usuário pode pedir para você criar, editar ou analisar o conteúdo de um arquivo .pptx. Um arquivo .pptx é essencialmente um arquivo ZIP contendo arquivos XML e outros recursos que você pode ler ou editar. Você tem diferentes ferramentas e fluxos de trabalho disponíveis para diferentes tarefas.
Lendo e analisando conteúdo
Extração de texto
Se você precisa apenas ler o conteúdo de texto de uma apresentação, você deve converter o documento para markdown:
# Converter documento para markdown
python -m markitdown path-to-file.pptx
Acesso XML bruto
Você precisa de acesso XML bruto para: comentários, anotações do orador, layouts de slide, animações, elementos de design e formatação complexa. Para qualquer um desses recursos, você precisará descompactar uma apresentação e ler seu conteúdo XML bruto.
Descompactando um arquivo
python ooxml/scripts/unpack.py <office_file> <output_dir>
Nota: O script unpack.py está localizado em skills/pptx/ooxml/scripts/unpack.py relativo à raiz do projeto. Se o script não existir neste caminho, use find . -name "unpack.py" para localizá-lo.
Estruturas chave de arquivo
ppt/presentation.xml - Metadados principais da apresentação e referências de slides
ppt/slides/slide{N}.xml - Conteúdo individual do slide (slide1.xml, slide2.xml, etc.)
ppt/notesSlides/notesSlide{N}.xml - Anotações do orador para cada slide
ppt/comments/modernComment_*.xml - Comentários para slides específicos
ppt/slideLayouts/ - Modelos de layout para slides
ppt/slideMasters/ - Modelos mestre de slide
ppt/theme/ - Informações de tema e estilo
ppt/media/ - Imagens e outros arquivos de mídia
Tipografia e extração de cores
Quando dado um exemplo de design para emular: Sempre analise a tipografia e as cores da apresentação primeiro usando os métodos abaixo:
- Leia o arquivo de tema: Verifique
ppt/theme/theme1.xml para cores (<a:clrScheme>) e fontes (<a:fontScheme>)
- Amostra de conteúdo de slide: Examine
ppt/slides/slide1.xml para uso real de fonte (<a:rPr>) e cores
- Busca por padrões: Use grep para encontrar cor (
<a:solidFill>, <a:srgbClr>) e referências de fonte em todos os arquivos XML
Criando uma nova apresentação PowerPoint sem um modelo
Ao criar uma nova apresentação PowerPoint do zero, use o fluxo de trabalho html2pptx para converter slides HTML para PowerPoint com posicionamento preciso.
Princípios de Design
CRÍTICO: Antes de criar qualquer apresentação, analise o conteúdo e escolha elementos de design apropriados:
- Considere o assunto: Sobre o que é esta apresentação? Que tom, indústria ou humor ela sugere?
- Verifique por branding: Se o usuário mencionar uma empresa/organização, considere suas cores de marca e identidade
- Combine a paleta com o conteúdo: Selecione cores que reflitam o assunto
- Declare sua abordagem: Explique suas escolhas de design antes de escrever o código
Requisitos:
- ✅ Declare sua abordagem de design informada pelo conteúdo ANTES de escrever o código
- ✅ Use apenas fontes seguras para web: Arial, Helvetica, Times New Roman, Georgia, Courier New, Verdana, Tahoma, Trebuchet MS, Impact
- ✅ Crie hierarquia visual clara através de tamanho, peso e cor
- ✅ Garanta legibilidade: contraste forte, texto adequadamente dimensionado, alinhamento limpo
- ✅ Seja consistente: repita padrões, espaçamento e linguagem visual entre os slides
Seleção de Paleta de Cores
Escolhendo cores criativamente:
- Pense além dos padrões: Quais cores genuinamente combinam com este tópico específico? Evite escolhas automáticas.
- Considere vários ângulos: Tópico, indústria, humor, nível de energia, público-alvo, identidade da marca (se mencionada)
- Seja aventureiro: Tente combinações inesperadas - uma apresentação de saúde não precisa ser verde, finanças não precisa ser azul marinho
- Construa sua paleta: Escolha 3-5 cores que funcionem juntas (cores dominantes + tons de apoio + destaque)
- Garanta o contraste: O texto deve ser claramente legível nos fundos
Exemplos de paletas de cores (use para despertar a criatividade - escolha uma, adapte-a ou crie a sua própria):
- Azul Clássico: Azul marinho profundo (#1C2833), cinza ardósia (#2E4053), prata (#AAB7B8), off-white (#F4F6F6)
- Verde-azulado e Coral: Verde-azulado (#5EA8A7), verde-azulado profundo (#277884), coral (#FE4447), branco (#FFFFFF)
- Vermelho Ousado: Vermelho (#C0392B), vermelho brilhante (#E74C3C), laranja (#F39C12), amarelo (#F1C40F), verde (#2ECC71)
- Blush Quente: Malva (#A49393), blush (#EED6D3), rosa (#E8B4B8), creme (#FAF7F2)
- Luxo Borgonha: Borgonha (#5D1D2E), carmesim (#951233), ferrugem (#C15937), ouro (#997929)
- Roxo Profundo e Esmeralda: Roxo (#B165FB), azul escuro (#181B24), esmeralda (#40695B), branco (#FFFFFF)
- Creme e Verde Floresta: Creme (#FFE1C7), verde floresta (#40695B), branco (#FCFCFC)
- Rosa e Roxo: Rosa (#F8275B), coral (#FF574A), rosa (#FF737D), roxo (#3D2F68)
- Lima e Ameixa: Lima (#C5DE82), ameixa (#7C3A5F), coral (#FD8C6E), azul-cinza (#98ACB5)
- Preto e Ouro: Ouro (#BF9A4A), preto (#000000), creme (#F4F6F6)
- Sálvia e Terracota: Sálvia (#87A96B), terracota (#E07A5F), creme (#F4F1DE), carvão (#2C2C2C)
- Carvão e Vermelho: Carvão (#292929), vermelho (#E33737), cinza claro (#CCCBCB)
- Laranja Vibrante: Laranja (#F96D00), cinza claro (#F2F2F2), carvão (#222831)
- Verde Floresta: Preto (#191A19), verde (#4E9F3D), verde escuro (#1E5128), branco (#FFFFFF)
- Arco-íris Retrô: Roxo (#722880), rosa (#D72D51), laranja (#EB5C18), âmbar (#F08800), ouro (#DEB600)
- Terroso Vintage: Mostarda (#E3B448), sálvia (#CBD18F), verde floresta (#3A6B35), creme (#F4F1DE)
- Rosa Costeira: Rosa velha (#AD7670), castor (#B49886), casca de ovo (#F3ECDC), cinza cinza (#BFD5BE)
- Laranja e Turquesa: Laranja claro (#FC993E), turquesa acinzentado (#667C6F), branco (#FCFCFC)
Opções de Detalhes Visuais
Padrões Geométricos:
- Divisores de seção diagonais em vez de horizontais
- Larguras de coluna assimétricas (30/70, 40/60, 25/75)
- Cabeçalhos de texto rotacionados a 90° ou 270°
- Molduras circulares/hexagonais para imagens
- Formas de destaque triangulares nos cantos
- Formas sobrepostas para profundidade
Tratamentos de Borda e Moldura:
- Bordas grossas de uma cor (10-20pt) em apenas um lado
- Bordas de linha dupla com cores contrastantes
- Colchetes de canto em vez de molduras completas
- Bordas em forma de L (topo+esquerda ou fundo+direita)
- Acentos sublinhados abaixo dos cabeçalhos (3-5pt de espessura)
Tratamentos de Tipografia:
- Contraste de tamanho extremo (manchetes de 72pt vs corpo de 11pt)
- Cabeçalhos em maiúsculas com espaçamento entre letras amplo
- Seções numeradas em tipo de exibição superdimensionado
- Monoespaçado (Courier New) para dados/estatísticas/conteúdo técnico
- Fontes condensadas (Arial Narrow) para informações densas
- Texto contornado para ênfase
Estilo de Gráfico e Dados:
- Gráficos monocromáticos com uma única cor de destaque para dados principais
- Gráficos de barras horizontais em vez de verticais
- Gráficos de pontos em vez de gráficos de barras
- Linhas de grade mínimas ou nenhuma
- Rótulos de dados diretamente nos elementos (sem legendas)
- Números superdimensionados para métricas principais
Inovações de Layout:
- Imagens de sangramento total com sobreposições de texto
- Coluna da barra lateral (20-30% de largura) para navegação/contexto
- Sistemas de grade modular (blocos 3×3, 4×4)
- Fluxo de conteúdo padrão Z ou padrão F
- Caixas de texto flutuantes sobre formas coloridas
- Layouts de várias colunas estilo revista
Tratamentos de Fundo:
- Blocos de cor sólida ocupando 40-60% do slide
- Preenchimentos de gradiente (vertical ou diagonal apenas)
- Fundos divididos (duas cores, diagonal ou vertical)
- Faixas de cor de ponta a ponta
- Espaço negativo como elemento de design
Dicas de Layout
Ao criar slides com gráficos ou tabelas:
- Layout de duas colunas (PREFERIDO): Use um cabeçalho abrangendo toda a largura, depois duas colunas abaixo - texto/marcadores em uma coluna e o conteúdo em destaque na outra. Isso fornece melhor equilíbrio e torna os gráficos/tabelas mais legíveis. Use flexbox com larguras de coluna desiguais (por exemplo, divisão 40%/60%) para otimizar o espaço para cada tipo de conteúdo.
- Layout de slide completo: Deixe o conteúdo em destaque (gráfico/tabela) ocupar todo o slide para máximo impacto e legibilidade
- NUNCA empilhe verticalmente: Não coloque gráficos/tabelas abaixo do texto em uma única coluna - isso causa má legibilidade e problemas de layout
Fluxo de Trabalho
- OBRIGATÓRIO - LEIA O ARQUIVO INTEIRO: Leia
html2pptx.md completamente do início ao fim. NUNCA defina limites de intervalo ao ler este arquivo. Leia o conteúdo completo do arquivo para sintaxe detalhada, regras de formatação críticas e práticas recomendadas antes de prosseguir com a criação da apresentação.
- Crie um arquivo HTML para cada slide com dimensões adequadas (por exemplo, 720pt × 405pt para 16:9)
- Use
<p>, <h1>-<h6>, <ul>, <ol> para todo o conteúdo de texto
- Use
class="placeholder" para áreas onde gráficos/tabelas serão adicionados (renderize com fundo cinza para visibilidade)
- CRÍTICO: Rasterizar gradientes e ícones como imagens PNG PRIMEIRO usando Sharp, depois referencie no HTML
- LAYOUT: Para slides com gráficos/tabelas/imagens, use layout de slide completo ou layout de duas colunas para melhor legibilidade
- Crie e execute um arquivo JavaScript usando a biblioteca
html2pptx.js para converter slides HTML para PowerPoint e salvar a apresentação
- Use a função
html2pptx() para processar cada arquivo HTML
- Adicione gráficos e tabelas às áreas de espaço reservado usando a API PptxGenJS
- Salve a apresentação usando
pptx.writeFile()
- Validação visual: Gere miniaturas e inspecione problemas de layout
- Crie grade de miniaturas:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4
- Leia e examine cuidadosamente a imagem da miniatura para:
- Corte de texto: Texto sendo cortado por barras de cabeçalho, formas ou bordas do slide
- Sobreposição de texto: Texto se sobrepondo a outro texto ou formas
- Problemas de posicionamento: Conteúdo muito próximo das bordas do slide ou outros elementos
- Problemas de contraste: Contraste insuficiente entre texto e fundos
- Se problemas encontrados, ajuste margens/espaçamento/cores HTML e regenere a apresentação
- Repita até que todos os slides estejam visualmente corretos
Editando uma apresentação PowerPoint existente
Ao editar slides em uma apresentação PowerPoint existente, você precisa trabalhar com o formato Office Open XML (OOXML) bruto. Isso envolve descompactar o arquivo .pptx, editar o conteúdo XML e reempacotá-lo.
Fluxo de Trabalho
- OBRIGATÓRIO - LEIA O ARQUIVO INTEIRO: Leia
ooxml.md (~500 linhas) completamente do início ao fim. NUNCA defina limites de intervalo ao ler este arquivo. Leia o conteúdo completo do arquivo para orientação detalhada sobre a estrutura OOXML e fluxos de trabalho de edição antes de qualquer edição de apresentação.
- Descompacte a apresentação:
python ooxml/scripts/unpack.py <office_file> <output_dir>
- Edite os arquivos XML (principalmente
ppt/slides/slide{N}.xml e arquivos relacionados)
- CRÍTICO: Valide imediatamente após cada edição e corrija quaisquer erros de validação antes de prosseguir:
python ooxml/scripts/validate.py <dir> --original <file>
- Empacote a apresentação final:
python ooxml/scripts/pack.py <input_directory> <office_file>
Criando uma nova apresentação PowerPoint usando um modelo
Quando você precisa criar uma apresentação que segue o design de um modelo existente, você precisará duplicar e reorganizar os slides do modelo antes de substituir o contexto do espaço reservado.
Fluxo de Trabalho
Extrair texto do modelo E criar grade de miniaturas visuais:
- Extrair texto:
python -m markitdown template.pptx > template-content.md
- Leia
template-content.md: Leia o arquivo inteiro para entender o conteúdo da apresentação do modelo. NUNCA defina limites de intervalo ao ler este arquivo.
- Crie grades de miniaturas:
python scripts/thumbnail.py template.pptx
- Veja a seção Criando Grades de Miniaturas para mais detalhes
Analise o modelo e salve o inventário em um arquivo:
Análise Visual: Revise a(s) grade(s) de miniaturas para entender layouts de slides, padrões de design e estrutura visual
Crie e salve um arquivo de inventário de modelo em template-inventory.md contendo:
# Análise de Inventário de Modelo
**Total de Slides: [contagem]**
**IMPORTANTE: Slides são indexados em 0 (primeiro slide = 0, último slide = contagem-1)**
## [Nome da Categoria]
- Slide 0: [Código de layout se disponível] - Descrição/propósito
- Slide 1: [Código de layout] - Descrição/propósito
- Slide 2: [Código de layout] - Descrição/propósito
[... CADA slide deve ser listado individualmente com seu índice ...]
Usando a grade de miniaturas: Referencie as miniaturas visuais para identificar:
- Padrões de layout (slides de título, layouts de conteúdo, divisores de seção)
- Locais e contagens de espaços reservados para imagens
- Consistência de design entre grupos de slides
- Hierarquia visual e estrutura
Este arquivo de inventário é NECESSÁRIO para selecionar modelos apropriados na próxima etapa
Crie o esboço da apresentação com base no inventário do modelo:
- Revise os modelos disponíveis da etapa 2.
- Escolha um modelo de introdução ou título para o primeiro slide. Este deve ser um dos primeiros modelos.
- Escolha layouts seguros e baseados em texto para os outros slides.
- CRÍTICO: Combine a estrutura do layout com o conteúdo real:
- Layouts de coluna única: Use para narrativa unificada ou tópico único
- Layouts de duas colunas: Use APENAS quando tiver exatamente 2 itens/conceitos distintos
- Layouts de três colunas: Use APENAS quando tiver exatamente 3 itens/conceitos distintos
- Layouts de imagem + texto: Use APENAS quando tiver imagens reais para inserir
- Layouts de citação: Use APENAS para citações reais de pessoas (com atribuição), nunca para ênfase
- Nunca use layouts com mais espaços reservados do que você tem conteúdo
- Se você tiver 2 itens, não os force em um layout de 3 colunas
- Se você tiver 4+ itens, considere dividir em vários slides ou usar um formato de lista
- Conte seus pedaços de conteúdo reais ANTES de selecionar o layout
- Verifique se cada espaço reservado no layout escolhido será preenchido com conteúdo significativo
- Selecione uma opção representando o melhor layout para cada seção de conteúdo.
- Salve
outline.md com conteúdo E mapeamento de modelo que aproveita os designs disponíveis
- Exemplo de mapeamento de modelo:
# Slides de modelo para usar (indexação baseada em 0)
# AVISO: Verifique se os índices estão dentro do intervalo! Modelo com 73 slides tem índices 0-72
# Mapeamento: números de slides do esboço -> índices de slides do modelo
template_mapping = [
0, # Use slide 0 (Título/Capa)
34, # Use slide 34 (B1: Título e corpo)
34, # Use slide 34 novamente (duplicata para segundo B1)
50, # Use slide 50 (E1: Citação)
54, # Use slide 54 (F2: Fechamento + Texto)
]
Duplique, reordene e exclua slides usando rearrange.py:
- Use o script
scripts/rearrange.py para criar uma nova apresentação com slides na ordem desejada:python scripts/rearrange.py template.pptx working.pptx 0,34,34,50,52
- O script lida com a duplicação de slides repetidos, exclusão de slides não utilizados e reordenação automaticamente
- Os índices de slides são baseados em 0 (o primeiro slide é 0, o segundo é 1, etc.)
- O mesmo índice de slide pode aparecer várias vezes para duplicar esse slide
Extraia TODO o texto usando o script inventory.py:
Execute extração de inventário:
python scripts/inventory.py working.pptx text-inventory.json
Leia text-inventory.json: Leia todo o arquivo text-inventory.json para entender todas as formas e suas propriedades. NUNCA defina limites de intervalo ao ler este arquivo.
A estrutura JSON do inventário:
{
"slide-0": {
"shape-0": {
"placeholder_type": "TITLE", // ou null para não-placeholders
"left": 1.5, // posição em polegadas
"top": 2.0,
"width": 7.5,
"height": 1.2,
"paragraphs": [
{
"text": "Texto do parágrafo",
// Propriedades opcionais (apenas incluídas quando não padrão):
"bullet": true, // marcador explícito detectado
"level": 0, // apenas incluído quando bullet é true
"alignment": "CENTER", // CENTER, RIGHT (não LEFT)
"space_before": 10.0, // espaço antes do parágrafo em pontos
"space_after": 6.0, // espaço após parágrafo em pontos
"line_spacing": 22.4, // espaçamento entre linhas em pontos
"font_name": "Arial", // da primeira execução
"font_size": 14.0, // em pontos
"bold": true,
"italic": false,
"underline": false,
"color": "FF0000" // cor RGB
}
]
}
}
}
Principais características:
- Slides: Nomeados como "slide-0", "slide-1", etc.
- Formas: Ordenadas por posição visual (cima-baixo, esquerda-direita) como "shape-0", "shape-1", etc.
- Tipos de espaço reservado: TITLE, CENTER_TITLE, SUBTITLE, BODY, OBJECT, ou null
- Tamanho de fonte padrão:
default_font_size em pontos extraído de espaços reservados de layout (quando disponível)
- Números de slide são filtrados: Formas com tipo de espaço reservado SLIDE_NUMBER são excluídas automaticamente do inventário
- Marcadores: Quando
bullet: true, level é sempre incluído (mesmo se 0)
- Espaçamento:
space_before, space_after e line_spacing em pontos (apenas incluído quando definido)
- Cores:
color para RGB (por exemplo, "FF0000"), theme_color para cores do tema (por exemplo, "DARK_1")
- Propriedades: Apenas valores não padrão são incluídos na saída
Gere texto de substituição e salve os dados em um arquivo JSON
Com base no inventário de texto da etapa anterior:
- CRÍTICO: Primeiro verifique quais formas existem no inventário - apenas referencie formas que estão realmente presentes
- VALIDAÇÃO: O script replace.py validará se todas as formas em seu JSON de substituição existem no inventário
- Se você referenciar uma forma inexistente, receberá um erro mostrando as formas disponíveis
- Se você referenciar um slide inexistente, receberá um erro indicando que o slide não existe
- Todos os erros de validação são mostrados de uma vez antes do script sair
- IMPORTANTE: O script replace.py usa inventory.py internamente para identificar TODAS as formas de texto
- LIMPEZA AUTOMÁTICA: TODAS as formas de texto do inventário serão limpas, a menos que você forneça "paragraphs" para elas
- Adicione um campo "paragraphs" às formas que precisam de conteúdo (não "replacement_paragraphs")
- Formas sem "paragraphs" no JSON de substituição terão seu texto limpo automaticamente
- Parágrafos com marcadores serão automaticamente alinhados à esquerda. Não defina a propriedade
alignment quando "bullet": true
- Gere conteúdo de substituição apropriado para texto de espaço reservado
- Use o tamanho da forma para determinar o comprimento de conteúdo apropriado
- CRÍTICO: Inclua propriedades de parágrafo do inventário original - não forneça apenas texto
- IMPORTANTE: Quando bullet: true, NÃO inclua símbolos de marcador (•, -, *) no texto - eles são adicionados automaticamente
- REGRAS DE FORMATAÇÃO ESSENCIAIS:
- Cabeçalhos/títulos geralmente devem ter
"bold": true
- Itens de lista devem ter
"bullet": true, "level": 0 (nível é obrigatório quando bullet é true)
- Preserve quaisquer propriedades de alinhamento (por exemplo,
"alignment": "CENTER" para texto centralizado)
- Inclua propriedades de fonte quando diferentes do padrão (por exemplo,
"font_size": 14.0, "font_name": "Lora")
- Cores: Use
"color": "FF0000" para RGB ou "theme_color": "DARK_1" para cores do tema
- O script de substituição espera parágrafos formatados corretamente, não apenas cadeias de texto
- Formas sobrepostas: Prefira formas com default_font_size maior ou placeholder_type mais apropriado
- Salve o inventário atualizado com substituições em
replacement-text.json
- AVISO: Layouts de modelo diferentes têm contagens de formas diferentes - sempre verifique o inventário real antes de criar substituições
Exemplo de campo paragraphs mostrando formatação adequada:
"paragraphs": [
{
"text": "Novo texto de título da apresentação",
"alignment": "CENTER",
"bold": true
},
{
"text": "Cabeçalho da Seção",
"bold": true
},
{
"text": "Primeiro ponto de marcador sem símbolo de marcador",
"bullet": true,
"level": 0
},
{
"text": "Texto colorido em vermelho",
"color": "FF0000"
},
{
"text": "Texto colorido do tema",
"theme_color": "DARK_1"
},
{
"text": "Texto de parágrafo regular sem formatação especial"
}
]
Formas não listadas no JSON de substituição são limpas automaticamente:
{
"slide-0": {
"shape-0": {
"paragraphs": [...] // Esta forma recebe novo texto
}
// shape-1 e shape-2 do inventário serão limpos automaticamente
}
}
Padrões de formatação comuns para apresentações:
- Slides de título: Texto em negrito, às vezes centralizado
- Cabeçalhos de seção dentro dos slides: Texto em negrito
- Listas com marcadores: Cada item precisa de
"bullet": true, "level": 0
- Texto do corpo: Geralmente nenhuma propriedade especial necessária
- Citações: Podem ter alinhamento especial ou propriedades de fonte
Aplique substituições usando o script replace.py
python scripts/replace.py working.pptx replacement-text.json output.pptx
O script irá:
- Primeiro extrair o inventário de TODAS as formas de texto usando funções de inventory.py
- Validar se todas as formas no JSON de substituição existem no inventário
- Limpar texto de TODAS as formas identificadas no inventário
- Aplicar novo texto apenas a formas com "paragraphs" definidos no JSON de substituição
- Preservar a formatação aplicando propriedades de parágrafo do JSON
- Lidar com marcadores, alinhamento, propriedades de fonte e cores automaticamente
- Salvar a apresentação atualizada
Exemplo de erros de validação:
ERROR: Formas inválidas no JSON de substituição:
- Forma 'shape-99' não encontrada no 'slide-0'. Formas disponíveis: shape-0, shape-1, shape-4
- Slide 'slide-999' não encontrado no inventário
ERROR: Texto de substituição piorou o estouro nestas formas:
- slide-0/shape-2: estouro piorou em 1.25" (era 0.00", agora 1.25")
Criando Grades de Miniaturas
Para criar grades de miniaturas visuais de slides do PowerPoint para análise rápida e referência:
python scripts/thumbnail.py template.pptx [output_prefix]
Recursos:
- Cria:
thumbnails.jpg (ou thumbnails-1.jpg, thumbnails-2.jpg, etc. para grandes decks)
- Padrão: 5 colunas, máx 30 slides por grade (5×6)
- Prefixo personalizado:
python scripts/thumbnail.py template.pptx my-grid
- Nota: O prefixo de saída deve incluir o caminho se você quiser saída em um diretório específico (por exemplo,
workspace/my-grid)
- Ajustar colunas:
--cols 4 (faixa: 3-6, afeta slides por grade)
- Limites de grade: 3 cols = 12 slides/grade, 4 cols = 20, 5 cols = 30, 6 cols = 42
- Slides são indexados em zero (Slide 0, Slide 1, etc.)
Casos de uso:
- Análise de modelo: Entenda rapidamente layouts de slides e padrões de design
- Revisão de conteúdo: Visão geral visual de toda a apresentação
- Referência de navegação: Encontre slides específicos por sua aparência visual
- Verificação de qualidade: Verifique se todos os slides estão formatados corretamente
Exemplos:
# Uso básico
python scripts/thumbnail.py presentation.pptx
# Combinar opções: nome personalizado, colunas
python scripts/thumbnail.py template.pptx analysis --cols 4
Convertendo Slides para Imagens
Para analisar visualmente slides do PowerPoint, converta-os em imagens usando um processo de duas etapas:
Converter PPTX para PDF:
soffice --headless --convert-to pdf template.pptx
Converter páginas PDF para imagens JPEG:
pdftoppm -jpeg -r 150 template.pdf slide
Isso cria arquivos como slide-1.jpg, slide-2.jpg, etc.
Opções:
-r 150: Define a resolução para 150 DPI (ajuste para equilíbrio qualidade/tamanho)
-jpeg: Saída no formato JPEG (use -png para PNG se preferir)
-f N: Primeira página para converter (por exemplo, -f 2 começa da página 2)
-l N: Última página para converter (por exemplo, -l 5 para na página 5)
slide: Prefixo para arquivos de saída
Exemplo para intervalo específico:
pdftoppm -jpeg -r 150 -f 2 -l 5 template.pdf slide # Converte apenas páginas 2-5
Diretrizes de Estilo de Código
IMPORTANTE: Ao gerar código para operações PPTX:
- Escreva código conciso
- Evite nomes de variáveis verbosos e operações redundantes
- Evite instruções de impressão desnecessárias
Dependências
Dependências necessárias (já devem estar instaladas):
- markitdown:
pip install "markitdown[pptx]" (para extração de texto de apresentações)
- pptxgenjs:
npm install -g pptxgenjs (para criar apresentações via html2pptx)
- playwright:
npm install -g playwright (para renderização HTML em html2pptx)
- react-icons:
npm install -g react-icons react react-dom (para ícones)
- sharp:
npm install -g sharp (para rasterização SVG e processamento de imagem)
- LibreOffice:
sudo apt-get install libreoffice (para conversão PDF)
- Poppler:
sudo apt-get install poppler-utils (para pdftoppm para converter PDF em imagens)
- defusedxml:
pip install defusedxml (para análise XML segura)
1---2name: pptx3description: Criação, edição e análise de apresentações. Quando o Claude precisar trabalhar com apresentações (.pptx files) para: (1) Criar novas apresentações, (2) Modificar ou editar conteúdo, (3) Trabalhar com layouts, (4) Adicionar comentários ou anotações do orador, ou quaisquer outras tarefas de apresentação4license: Proprietário. LICENSE.txt tem termos completos5---67# PPTX: criação, edição e análise89## Visão Geral1011Um usuário pode pedir para você criar, editar ou analisar o conteúdo de um arquivo .pptx. Um arquivo .pptx é essencialmente um arquivo ZIP contendo arquivos XML e outros recursos que você pode ler ou editar. Você tem diferentes ferramentas e fluxos de trabalho disponíveis para diferentes tarefas.1213## Lendo e analisando conteúdo1415### Extração de texto1617Se você precisa apenas ler o conteúdo de texto de uma apresentação, você deve converter o documento para markdown:1819```bash20# Converter documento para markdown21python -m markitdown path-to-file.pptx22```2324### Acesso XML bruto2526Você precisa de acesso XML bruto para: comentários, anotações do orador, layouts de slide, animações, elementos de design e formatação complexa. Para qualquer um desses recursos, você precisará descompactar uma apresentação e ler seu conteúdo XML bruto.2728#### Descompactando um arquivo2930`python ooxml/scripts/unpack.py <office_file> <output_dir>`3132**Nota**: O script unpack.py está localizado em `skills/pptx/ooxml/scripts/unpack.py` relativo à raiz do projeto. Se o script não existir neste caminho, use `find . -name "unpack.py"` para localizá-lo.3334#### Estruturas chave de arquivo3536- `ppt/presentation.xml` - Metadados principais da apresentação e referências de slides37- `ppt/slides/slide{N}.xml` - Conteúdo individual do slide (slide1.xml, slide2.xml, etc.)38- `ppt/notesSlides/notesSlide{N}.xml` - Anotações do orador para cada slide39- `ppt/comments/modernComment_*.xml` - Comentários para slides específicos40- `ppt/slideLayouts/` - Modelos de layout para slides41- `ppt/slideMasters/` - Modelos mestre de slide42- `ppt/theme/` - Informações de tema e estilo43- `ppt/media/` - Imagens e outros arquivos de mídia4445#### Tipografia e extração de cores4647**Quando dado um exemplo de design para emular**: Sempre analise a tipografia e as cores da apresentação primeiro usando os métodos abaixo:48491. **Leia o arquivo de tema**: Verifique `ppt/theme/theme1.xml` para cores (`<a:clrScheme>`) e fontes (`<a:fontScheme>`)502. **Amostra de conteúdo de slide**: Examine `ppt/slides/slide1.xml` para uso real de fonte (`<a:rPr>`) e cores513. **Busca por padrões**: Use grep para encontrar cor (`<a:solidFill>`, `<a:srgbClr>`) e referências de fonte em todos os arquivos XML5253## Criando uma nova apresentação PowerPoint **sem um modelo**5455Ao criar uma nova apresentação PowerPoint do zero, use o fluxo de trabalho **html2pptx** para converter slides HTML para PowerPoint com posicionamento preciso.5657### Princípios de Design5859**CRÍTICO**: Antes de criar qualquer apresentação, analise o conteúdo e escolha elementos de design apropriados:60611. **Considere o assunto**: Sobre o que é esta apresentação? Que tom, indústria ou humor ela sugere?622. **Verifique por branding**: Se o usuário mencionar uma empresa/organização, considere suas cores de marca e identidade633. **Combine a paleta com o conteúdo**: Selecione cores que reflitam o assunto644. **Declare sua abordagem**: Explique suas escolhas de design antes de escrever o código6566**Requisitos**:6768- ✅ Declare sua abordagem de design informada pelo conteúdo ANTES de escrever o código69- ✅ Use apenas fontes seguras para web: Arial, Helvetica, Times New Roman, Georgia, Courier New, Verdana, Tahoma, Trebuchet MS, Impact70- ✅ Crie hierarquia visual clara através de tamanho, peso e cor71- ✅ Garanta legibilidade: contraste forte, texto adequadamente dimensionado, alinhamento limpo72- ✅ Seja consistente: repita padrões, espaçamento e linguagem visual entre os slides7374#### Seleção de Paleta de Cores7576**Escolhendo cores criativamente**:7778- **Pense além dos padrões**: Quais cores genuinamente combinam com este tópico específico? Evite escolhas automáticas.79- **Considere vários ângulos**: Tópico, indústria, humor, nível de energia, público-alvo, identidade da marca (se mencionada)80- **Seja aventureiro**: Tente combinações inesperadas - uma apresentação de saúde não precisa ser verde, finanças não precisa ser azul marinho81- **Construa sua paleta**: Escolha 3-5 cores que funcionem juntas (cores dominantes + tons de apoio + destaque)82- **Garanta o contraste**: O texto deve ser claramente legível nos fundos8384**Exemplos de paletas de cores** (use para despertar a criatividade - escolha uma, adapte-a ou crie a sua própria):85861. **Azul Clássico**: Azul marinho profundo (#1C2833), cinza ardósia (#2E4053), prata (#AAB7B8), off-white (#F4F6F6)872. **Verde-azulado e Coral**: Verde-azulado (#5EA8A7), verde-azulado profundo (#277884), coral (#FE4447), branco (#FFFFFF)883. **Vermelho Ousado**: Vermelho (#C0392B), vermelho brilhante (#E74C3C), laranja (#F39C12), amarelo (#F1C40F), verde (#2ECC71)894. **Blush Quente**: Malva (#A49393), blush (#EED6D3), rosa (#E8B4B8), creme (#FAF7F2)905. **Luxo Borgonha**: Borgonha (#5D1D2E), carmesim (#951233), ferrugem (#C15937), ouro (#997929)916. **Roxo Profundo e Esmeralda**: Roxo (#B165FB), azul escuro (#181B24), esmeralda (#40695B), branco (#FFFFFF)927. **Creme e Verde Floresta**: Creme (#FFE1C7), verde floresta (#40695B), branco (#FCFCFC)938. **Rosa e Roxo**: Rosa (#F8275B), coral (#FF574A), rosa (#FF737D), roxo (#3D2F68)949. **Lima e Ameixa**: Lima (#C5DE82), ameixa (#7C3A5F), coral (#FD8C6E), azul-cinza (#98ACB5)9510. **Preto e Ouro**: Ouro (#BF9A4A), preto (#000000), creme (#F4F6F6)9611. **Sálvia e Terracota**: Sálvia (#87A96B), terracota (#E07A5F), creme (#F4F1DE), carvão (#2C2C2C)9712. **Carvão e Vermelho**: Carvão (#292929), vermelho (#E33737), cinza claro (#CCCBCB)9813. **Laranja Vibrante**: Laranja (#F96D00), cinza claro (#F2F2F2), carvão (#222831)9914. **Verde Floresta**: Preto (#191A19), verde (#4E9F3D), verde escuro (#1E5128), branco (#FFFFFF)10015. **Arco-íris Retrô**: Roxo (#722880), rosa (#D72D51), laranja (#EB5C18), âmbar (#F08800), ouro (#DEB600)10116. **Terroso Vintage**: Mostarda (#E3B448), sálvia (#CBD18F), verde floresta (#3A6B35), creme (#F4F1DE)10217. **Rosa Costeira**: Rosa velha (#AD7670), castor (#B49886), casca de ovo (#F3ECDC), cinza cinza (#BFD5BE)10318. **Laranja e Turquesa**: Laranja claro (#FC993E), turquesa acinzentado (#667C6F), branco (#FCFCFC)104105#### Opções de Detalhes Visuais106107**Padrões Geométricos**:108109- Divisores de seção diagonais em vez de horizontais110- Larguras de coluna assimétricas (30/70, 40/60, 25/75)111- Cabeçalhos de texto rotacionados a 90° ou 270°112- Molduras circulares/hexagonais para imagens113- Formas de destaque triangulares nos cantos114- Formas sobrepostas para profundidade115116**Tratamentos de Borda e Moldura**:117118- Bordas grossas de uma cor (10-20pt) em apenas um lado119- Bordas de linha dupla com cores contrastantes120- Colchetes de canto em vez de molduras completas121- Bordas em forma de L (topo+esquerda ou fundo+direita)122- Acentos sublinhados abaixo dos cabeçalhos (3-5pt de espessura)123124**Tratamentos de Tipografia**:125126- Contraste de tamanho extremo (manchetes de 72pt vs corpo de 11pt)127- Cabeçalhos em maiúsculas com espaçamento entre letras amplo128- Seções numeradas em tipo de exibição superdimensionado129- Monoespaçado (Courier New) para dados/estatísticas/conteúdo técnico130- Fontes condensadas (Arial Narrow) para informações densas131- Texto contornado para ênfase132133**Estilo de Gráfico e Dados**:134135- Gráficos monocromáticos com uma única cor de destaque para dados principais136- Gráficos de barras horizontais em vez de verticais137- Gráficos de pontos em vez de gráficos de barras138- Linhas de grade mínimas ou nenhuma139- Rótulos de dados diretamente nos elementos (sem legendas)140- Números superdimensionados para métricas principais141142**Inovações de Layout**:143144- Imagens de sangramento total com sobreposições de texto145- Coluna da barra lateral (20-30% de largura) para navegação/contexto146- Sistemas de grade modular (blocos 3×3, 4×4)147- Fluxo de conteúdo padrão Z ou padrão F148- Caixas de texto flutuantes sobre formas coloridas149- Layouts de várias colunas estilo revista150151**Tratamentos de Fundo**:152153- Blocos de cor sólida ocupando 40-60% do slide154- Preenchimentos de gradiente (vertical ou diagonal apenas)155- Fundos divididos (duas cores, diagonal ou vertical)156- Faixas de cor de ponta a ponta157- Espaço negativo como elemento de design158159### Dicas de Layout160161**Ao criar slides com gráficos ou tabelas:**162163- **Layout de duas colunas (PREFERIDO)**: Use um cabeçalho abrangendo toda a largura, depois duas colunas abaixo - texto/marcadores em uma coluna e o conteúdo em destaque na outra. Isso fornece melhor equilíbrio e torna os gráficos/tabelas mais legíveis. Use flexbox com larguras de coluna desiguais (por exemplo, divisão 40%/60%) para otimizar o espaço para cada tipo de conteúdo.164- **Layout de slide completo**: Deixe o conteúdo em destaque (gráfico/tabela) ocupar todo o slide para máximo impacto e legibilidade165- **NUNCA empilhe verticalmente**: Não coloque gráficos/tabelas abaixo do texto em uma única coluna - isso causa má legibilidade e problemas de layout166167### Fluxo de Trabalho1681691. **OBRIGATÓRIO - LEIA O ARQUIVO INTEIRO**: Leia [`html2pptx.md`](html2pptx.md) completamente do início ao fim. **NUNCA defina limites de intervalo ao ler este arquivo.** Leia o conteúdo completo do arquivo para sintaxe detalhada, regras de formatação críticas e práticas recomendadas antes de prosseguir com a criação da apresentação.1702. Crie um arquivo HTML para cada slide com dimensões adequadas (por exemplo, 720pt × 405pt para 16:9)171 - Use `<p>`, `<h1>`-`<h6>`, `<ul>`, `<ol>` para todo o conteúdo de texto172 - Use `class="placeholder"` para áreas onde gráficos/tabelas serão adicionados (renderize com fundo cinza para visibilidade)173 - **CRÍTICO**: Rasterizar gradientes e ícones como imagens PNG PRIMEIRO usando Sharp, depois referencie no HTML174 - **LAYOUT**: Para slides com gráficos/tabelas/imagens, use layout de slide completo ou layout de duas colunas para melhor legibilidade1753. Crie e execute um arquivo JavaScript usando a biblioteca [`html2pptx.js`](scripts/html2pptx.js) para converter slides HTML para PowerPoint e salvar a apresentação176 - Use a função `html2pptx()` para processar cada arquivo HTML177 - Adicione gráficos e tabelas às áreas de espaço reservado usando a API PptxGenJS178 - Salve a apresentação usando `pptx.writeFile()`1794. **Validação visual**: Gere miniaturas e inspecione problemas de layout180 - Crie grade de miniaturas: `python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4`181 - Leia e examine cuidadosamente a imagem da miniatura para:182 - **Corte de texto**: Texto sendo cortado por barras de cabeçalho, formas ou bordas do slide183 - **Sobreposição de texto**: Texto se sobrepondo a outro texto ou formas184 - **Problemas de posicionamento**: Conteúdo muito próximo das bordas do slide ou outros elementos185 - **Problemas de contraste**: Contraste insuficiente entre texto e fundos186 - Se problemas encontrados, ajuste margens/espaçamento/cores HTML e regenere a apresentação187 - Repita até que todos os slides estejam visualmente corretos188189## Editando uma apresentação PowerPoint existente190191Ao editar slides em uma apresentação PowerPoint existente, você precisa trabalhar com o formato Office Open XML (OOXML) bruto. Isso envolve descompactar o arquivo .pptx, editar o conteúdo XML e reempacotá-lo.192193### Fluxo de Trabalho1941951. **OBRIGATÓRIO - LEIA O ARQUIVO INTEIRO**: Leia [`ooxml.md`](ooxml.md) (~500 linhas) completamente do início ao fim. **NUNCA defina limites de intervalo ao ler este arquivo.** Leia o conteúdo completo do arquivo para orientação detalhada sobre a estrutura OOXML e fluxos de trabalho de edição antes de qualquer edição de apresentação.1962. Descompacte a apresentação: `python ooxml/scripts/unpack.py <office_file> <output_dir>`1973. Edite os arquivos XML (principalmente `ppt/slides/slide{N}.xml` e arquivos relacionados)1984. **CRÍTICO**: Valide imediatamente após cada edição e corrija quaisquer erros de validação antes de prosseguir: `python ooxml/scripts/validate.py <dir> --original <file>`1995. Empacote a apresentação final: `python ooxml/scripts/pack.py <input_directory> <office_file>`200201## Criando uma nova apresentação PowerPoint **usando um modelo**202203Quando você precisa criar uma apresentação que segue o design de um modelo existente, você precisará duplicar e reorganizar os slides do modelo antes de substituir o contexto do espaço reservado.204205### Fluxo de Trabalho2062071. **Extrair texto do modelo E criar grade de miniaturas visuais**:208 - Extrair texto: `python -m markitdown template.pptx > template-content.md`209 - Leia `template-content.md`: Leia o arquivo inteiro para entender o conteúdo da apresentação do modelo. **NUNCA defina limites de intervalo ao ler este arquivo.**210 - Crie grades de miniaturas: `python scripts/thumbnail.py template.pptx`211 - Veja a seção [Criando Grades de Miniaturas](#creating-thumbnail-grids) para mais detalhes2122132. **Analise o modelo e salve o inventário em um arquivo**:214 - **Análise Visual**: Revise a(s) grade(s) de miniaturas para entender layouts de slides, padrões de design e estrutura visual215 - Crie e salve um arquivo de inventário de modelo em `template-inventory.md` contendo:216217 ```markdown218 # Análise de Inventário de Modelo219220 **Total de Slides: [contagem]**221 **IMPORTANTE: Slides são indexados em 0 (primeiro slide = 0, último slide = contagem-1)**222223 ## [Nome da Categoria]224225 - Slide 0: [Código de layout se disponível] - Descrição/propósito226 - Slide 1: [Código de layout] - Descrição/propósito227 - Slide 2: [Código de layout] - Descrição/propósito228 [... CADA slide deve ser listado individualmente com seu índice ...]229 ```230231 - **Usando a grade de miniaturas**: Referencie as miniaturas visuais para identificar:232 - Padrões de layout (slides de título, layouts de conteúdo, divisores de seção)233 - Locais e contagens de espaços reservados para imagens234 - Consistência de design entre grupos de slides235 - Hierarquia visual e estrutura236 - Este arquivo de inventário é NECESSÁRIO para selecionar modelos apropriados na próxima etapa2372383. **Crie o esboço da apresentação com base no inventário do modelo**:239 - Revise os modelos disponíveis da etapa 2.240 - Escolha um modelo de introdução ou título para o primeiro slide. Este deve ser um dos primeiros modelos.241 - Escolha layouts seguros e baseados em texto para os outros slides.242 - **CRÍTICO: Combine a estrutura do layout com o conteúdo real**:243 - Layouts de coluna única: Use para narrativa unificada ou tópico único244 - Layouts de duas colunas: Use APENAS quando tiver exatamente 2 itens/conceitos distintos245 - Layouts de três colunas: Use APENAS quando tiver exatamente 3 itens/conceitos distintos246 - Layouts de imagem + texto: Use APENAS quando tiver imagens reais para inserir247 - Layouts de citação: Use APENAS para citações reais de pessoas (com atribuição), nunca para ênfase248 - Nunca use layouts com mais espaços reservados do que você tem conteúdo249 - Se você tiver 2 itens, não os force em um layout de 3 colunas250 - Se você tiver 4+ itens, considere dividir em vários slides ou usar um formato de lista251 - Conte seus pedaços de conteúdo reais ANTES de selecionar o layout252 - Verifique se cada espaço reservado no layout escolhido será preenchido com conteúdo significativo253 - Selecione uma opção representando o **melhor** layout para cada seção de conteúdo.254 - Salve `outline.md` com conteúdo E mapeamento de modelo que aproveita os designs disponíveis255 - Exemplo de mapeamento de modelo:256 ```257 # Slides de modelo para usar (indexação baseada em 0)258 # AVISO: Verifique se os índices estão dentro do intervalo! Modelo com 73 slides tem índices 0-72259 # Mapeamento: números de slides do esboço -> índices de slides do modelo260 template_mapping = [261 0, # Use slide 0 (Título/Capa)262 34, # Use slide 34 (B1: Título e corpo)263 34, # Use slide 34 novamente (duplicata para segundo B1)264 50, # Use slide 50 (E1: Citação)265 54, # Use slide 54 (F2: Fechamento + Texto)266 ]267 ```2682694. **Duplique, reordene e exclua slides usando `rearrange.py`**:270 - Use o script `scripts/rearrange.py` para criar uma nova apresentação com slides na ordem desejada:271 ```bash272 python scripts/rearrange.py template.pptx working.pptx 0,34,34,50,52273 ```274 - O script lida com a duplicação de slides repetidos, exclusão de slides não utilizados e reordenação automaticamente275 - Os índices de slides são baseados em 0 (o primeiro slide é 0, o segundo é 1, etc.)276 - O mesmo índice de slide pode aparecer várias vezes para duplicar esse slide2772785. **Extraia TODO o texto usando o script `inventory.py`**:279 - **Execute extração de inventário**:280 ```bash281 python scripts/inventory.py working.pptx text-inventory.json282 ```283 - **Leia text-inventory.json**: Leia todo o arquivo text-inventory.json para entender todas as formas e suas propriedades. **NUNCA defina limites de intervalo ao ler este arquivo.**284285 - A estrutura JSON do inventário:286287 ```json288 {289 "slide-0": {290 "shape-0": {291 "placeholder_type": "TITLE", // ou null para não-placeholders292 "left": 1.5, // posição em polegadas293 "top": 2.0,294 "width": 7.5,295 "height": 1.2,296 "paragraphs": [297 {298 "text": "Texto do parágrafo",299 // Propriedades opcionais (apenas incluídas quando não padrão):300 "bullet": true, // marcador explícito detectado301 "level": 0, // apenas incluído quando bullet é true302 "alignment": "CENTER", // CENTER, RIGHT (não LEFT)303 "space_before": 10.0, // espaço antes do parágrafo em pontos304 "space_after": 6.0, // espaço após parágrafo em pontos305 "line_spacing": 22.4, // espaçamento entre linhas em pontos306 "font_name": "Arial", // da primeira execução307 "font_size": 14.0, // em pontos308 "bold": true,309 "italic": false,310 "underline": false,311 "color": "FF0000" // cor RGB312 }313 ]314 }315 }316 }317 ```318319 - Principais características:320 - **Slides**: Nomeados como "slide-0", "slide-1", etc.321 - **Formas**: Ordenadas por posição visual (cima-baixo, esquerda-direita) como "shape-0", "shape-1", etc.322 - **Tipos de espaço reservado**: TITLE, CENTER_TITLE, SUBTITLE, BODY, OBJECT, ou null323 - **Tamanho de fonte padrão**: `default_font_size` em pontos extraído de espaços reservados de layout (quando disponível)324 - **Números de slide são filtrados**: Formas com tipo de espaço reservado SLIDE_NUMBER são excluídas automaticamente do inventário325 - **Marcadores**: Quando `bullet: true`, `level` é sempre incluído (mesmo se 0)326 - **Espaçamento**: `space_before`, `space_after` e `line_spacing` em pontos (apenas incluído quando definido)327 - **Cores**: `color` para RGB (por exemplo, "FF0000"), `theme_color` para cores do tema (por exemplo, "DARK_1")328 - **Propriedades**: Apenas valores não padrão são incluídos na saída3293306. **Gere texto de substituição e salve os dados em um arquivo JSON**331 Com base no inventário de texto da etapa anterior:332 - **CRÍTICO**: Primeiro verifique quais formas existem no inventário - apenas referencie formas que estão realmente presentes333 - **VALIDAÇÃO**: O script replace.py validará se todas as formas em seu JSON de substituição existem no inventário334 - Se você referenciar uma forma inexistente, receberá um erro mostrando as formas disponíveis335 - Se você referenciar um slide inexistente, receberá um erro indicando que o slide não existe336 - Todos os erros de validação são mostrados de uma vez antes do script sair337 - **IMPORTANTE**: O script replace.py usa inventory.py internamente para identificar TODAS as formas de texto338 - **LIMPEZA AUTOMÁTICA**: TODAS as formas de texto do inventário serão limpas, a menos que você forneça "paragraphs" para elas339 - Adicione um campo "paragraphs" às formas que precisam de conteúdo (não "replacement_paragraphs")340 - Formas sem "paragraphs" no JSON de substituição terão seu texto limpo automaticamente341 - Parágrafos com marcadores serão automaticamente alinhados à esquerda. Não defina a propriedade `alignment` quando `"bullet": true`342 - Gere conteúdo de substituição apropriado para texto de espaço reservado343 - Use o tamanho da forma para determinar o comprimento de conteúdo apropriado344 - **CRÍTICO**: Inclua propriedades de parágrafo do inventário original - não forneça apenas texto345 - **IMPORTANTE**: Quando bullet: true, NÃO inclua símbolos de marcador (•, -, \*) no texto - eles são adicionados automaticamente346 - **REGRAS DE FORMATAÇÃO ESSENCIAIS**:347 - Cabeçalhos/títulos geralmente devem ter `"bold": true`348 - Itens de lista devem ter `"bullet": true, "level": 0` (nível é obrigatório quando bullet é true)349 - Preserve quaisquer propriedades de alinhamento (por exemplo, `"alignment": "CENTER"` para texto centralizado)350 - Inclua propriedades de fonte quando diferentes do padrão (por exemplo, `"font_size": 14.0`, `"font_name": "Lora"`)351 - Cores: Use `"color": "FF0000"` para RGB ou `"theme_color": "DARK_1"` para cores do tema352 - O script de substituição espera **parágrafos formatados corretamente**, não apenas cadeias de texto353 - **Formas sobrepostas**: Prefira formas com default_font_size maior ou placeholder_type mais apropriado354 - Salve o inventário atualizado com substituições em `replacement-text.json`355 - **AVISO**: Layouts de modelo diferentes têm contagens de formas diferentes - sempre verifique o inventário real antes de criar substituições356357 Exemplo de campo paragraphs mostrando formatação adequada:358359 ```json360 "paragraphs": [361 {362 "text": "Novo texto de título da apresentação",363 "alignment": "CENTER",364 "bold": true365 },366 {367 "text": "Cabeçalho da Seção",368 "bold": true369 },370 {371 "text": "Primeiro ponto de marcador sem símbolo de marcador",372 "bullet": true,373 "level": 0374 },375 {376 "text": "Texto colorido em vermelho",377 "color": "FF0000"378 },379 {380 "text": "Texto colorido do tema",381 "theme_color": "DARK_1"382 },383 {384 "text": "Texto de parágrafo regular sem formatação especial"385 }386 ]387 ```388389 **Formas não listadas no JSON de substituição são limpas automaticamente**:390391 ```json392 {393 "slide-0": {394 "shape-0": {395 "paragraphs": [...] // Esta forma recebe novo texto396 }397 // shape-1 e shape-2 do inventário serão limpos automaticamente398 }399 }400 ```401402 **Padrões de formatação comuns para apresentações**:403 - Slides de título: Texto em negrito, às vezes centralizado404 - Cabeçalhos de seção dentro dos slides: Texto em negrito405 - Listas com marcadores: Cada item precisa de `"bullet": true, "level": 0`406 - Texto do corpo: Geralmente nenhuma propriedade especial necessária407 - Citações: Podem ter alinhamento especial ou propriedades de fonte4084097. **Aplique substituições usando o script `replace.py`**410411 ```bash412 python scripts/replace.py working.pptx replacement-text.json output.pptx413 ```414415 O script irá:416 - Primeiro extrair o inventário de TODAS as formas de texto usando funções de inventory.py417 - Validar se todas as formas no JSON de substituição existem no inventário418 - Limpar texto de TODAS as formas identificadas no inventário419 - Aplicar novo texto apenas a formas com "paragraphs" definidos no JSON de substituição420 - Preservar a formatação aplicando propriedades de parágrafo do JSON421 - Lidar com marcadores, alinhamento, propriedades de fonte e cores automaticamente422 - Salvar a apresentação atualizada423424 Exemplo de erros de validação:425426 ```427 ERROR: Formas inválidas no JSON de substituição:428 - Forma 'shape-99' não encontrada no 'slide-0'. Formas disponíveis: shape-0, shape-1, shape-4429 - Slide 'slide-999' não encontrado no inventário430 ```431432 ```433 ERROR: Texto de substituição piorou o estouro nestas formas:434 - slide-0/shape-2: estouro piorou em 1.25" (era 0.00", agora 1.25")435 ```436437## Criando Grades de Miniaturas438439Para criar grades de miniaturas visuais de slides do PowerPoint para análise rápida e referência:440441```bash442python scripts/thumbnail.py template.pptx [output_prefix]443```444445**Recursos**:446447- Cria: `thumbnails.jpg` (ou `thumbnails-1.jpg`, `thumbnails-2.jpg`, etc. para grandes decks)448- Padrão: 5 colunas, máx 30 slides por grade (5×6)449- Prefixo personalizado: `python scripts/thumbnail.py template.pptx my-grid`450 - Nota: O prefixo de saída deve incluir o caminho se você quiser saída em um diretório específico (por exemplo, `workspace/my-grid`)451- Ajustar colunas: `--cols 4` (faixa: 3-6, afeta slides por grade)452- Limites de grade: 3 cols = 12 slides/grade, 4 cols = 20, 5 cols = 30, 6 cols = 42453- Slides são indexados em zero (Slide 0, Slide 1, etc.)454455**Casos de uso**:456457- Análise de modelo: Entenda rapidamente layouts de slides e padrões de design458- Revisão de conteúdo: Visão geral visual de toda a apresentação459- Referência de navegação: Encontre slides específicos por sua aparência visual460- Verificação de qualidade: Verifique se todos os slides estão formatados corretamente461462**Exemplos**:463464```bash465# Uso básico466python scripts/thumbnail.py presentation.pptx467468# Combinar opções: nome personalizado, colunas469python scripts/thumbnail.py template.pptx analysis --cols 4470```471472## Convertendo Slides para Imagens473474Para analisar visualmente slides do PowerPoint, converta-os em imagens usando um processo de duas etapas:4754761. **Converter PPTX para PDF**:477478 ```bash479 soffice --headless --convert-to pdf template.pptx480 ```4814822. **Converter páginas PDF para imagens JPEG**:483 ```bash484 pdftoppm -jpeg -r 150 template.pdf slide485 ```486 Isso cria arquivos como `slide-1.jpg`, `slide-2.jpg`, etc.487488Opções:489490- `-r 150`: Define a resolução para 150 DPI (ajuste para equilíbrio qualidade/tamanho)491- `-jpeg`: Saída no formato JPEG (use `-png` para PNG se preferir)492- `-f N`: Primeira página para converter (por exemplo, `-f 2` começa da página 2)493- `-l N`: Última página para converter (por exemplo, `-l 5` para na página 5)494- `slide`: Prefixo para arquivos de saída495496Exemplo para intervalo específico:497498```bash499pdftoppm -jpeg -r 150 -f 2 -l 5 template.pdf slide # Converte apenas páginas 2-5500```501502## Diretrizes de Estilo de Código503504**IMPORTANTE**: Ao gerar código para operações PPTX:505506- Escreva código conciso507- Evite nomes de variáveis verbosos e operações redundantes508- Evite instruções de impressão desnecessárias509510## Dependências511512Dependências necessárias (já devem estar instaladas):513514- **markitdown**: `pip install "markitdown[pptx]"` (para extração de texto de apresentações)515- **pptxgenjs**: `npm install -g pptxgenjs` (para criar apresentações via html2pptx)516- **playwright**: `npm install -g playwright` (para renderização HTML em html2pptx)517- **react-icons**: `npm install -g react-icons react react-dom` (para ícones)518- **sharp**: `npm install -g sharp` (para rasterização SVG e processamento de imagem)519- **LibreOffice**: `sudo apt-get install libreoffice` (para conversão PDF)520- **Poppler**: `sudo apt-get install poppler-utils` (para pdftoppm para converter PDF em imagens)521- **defusedxml**: `pip install defusedxml` (para análise XML segura)