---
nome: Documento Word
descricao: gerar e editar arquivo .docx de verdade (contrato, relatório, currículo) com python-docx, e conferir antes de entregar
quando: word, docx, documento word, arquivo do word, em word, no word, currículo, contrato, ofício, relatório em word
autor: PrimoCode
---
Um .docx é um pacote de XML. Não escreva esse XML à mão: use `python-docx`.

**1. Prepare.** `python3 --version`. Instale num ambiente só do projeto — o
Python do sistema costuma recusar `pip install` direto:
`python3 -m venv .venv && .venv/bin/pip install python-docx`, e rode os scripts
com `.venv/bin/python`. Tem `pandoc`? Texto simples em Markdown vira .docx com
`pandoc texto.md -o saida.docx`.

**2. Escreva um script** (`gerar_documento.py`), não comandos soltos: dá para
rodar de novo depois de cada ajuste.
```python
from docx import Document
from docx.shared import Pt, Cm
doc = Document()
s = doc.sections[0]
s.page_width, s.page_height = Cm(21), Cm(29.7)          # A4
s.left_margin = s.right_margin = Cm(2.5)
doc.styles['Normal'].font.name = 'Calibri'
doc.styles['Normal'].font.size = Pt(11)
doc.add_heading('Contrato de prestação de serviço', level=1)
doc.add_paragraph('Texto do parágrafo.')
t = doc.add_table(rows=1, cols=3, style='Table Grid')
doc.save('contrato.docx')
```

**3. Estrutura com ESTILO, não com negrito.** Título é `add_heading` (Título 1,
2, 3). Assim o Word monta o sumário e o painel de navegação sozinho. Negrito
manual num parágrafo comum parece título, mas não é.
- Lista: `style='List Bullet'` ou `'List Number'`.
- Quebra de página: `doc.add_page_break()`.
- Imagem: `doc.add_picture('logo.png', width=Cm(4))`.
- Fonte que a outra pessoa tem (Calibri, Arial, Georgia, Times New Roman). Fonte
  que falta na máquina dela é trocada e o documento muda de tamanho.
- Número de página precisa de um campo PAGE no rodapé (um trecho de XML
  `fldSimple`); só coloque se pedirem.

**4. Editar um .docx que já existe:** `Document('original.docx')`, e salve com
OUTRO nome — o original fica intacto. O texto de um parágrafo vem quebrado em
pedaços (`runs`) com formatação diferente; troque dentro do pedaço certo para
não perder negrito e cor.

**5. Confira antes de entregar.**
- Reabra com o próprio `python-docx` e imprima os títulos e a contagem de
  parágrafos e tabelas: prova que o arquivo abre e tem o conteúdo.
- Tem LibreOffice (`soffice`)? `soffice --headless --convert-to pdf
  contrato.docx` e abra o PDF para OLHAR as páginas: tabela estourando a
  margem e título órfão no pé da página só aparecem assim.
- Procure texto de exemplo esquecido ("Lorem", "[NOME]", "XXX").

Contrato e documento legal: escreva o que a pessoa pediu, e diga em uma linha
que vale a leitura de um advogado antes de assinar.
