Gerar documentos de Word RTF com PHP

Criar arquivos RTF combinando um documento com dados armazenados na Intranet/Extranet.

Por Alfredo Anaya


Publicado em: 22/2/08
Valorize este artigo:
Em muitos desenvolvimentos web surge a necessidade de criar documentos que procedem da combinação de um documento origem com os dados armazenados na Intranet/Extranet da empresa, algo parecido ao que se consegue com a combinação de correspondência de Word.

Exemplos práticos podem ser os seguintes:

Geração de etiquetas a partir de um banco de dados de clientes ou artigos.
Certificados ou diplomas para os alunos de um curso.
Listagem de participantes em um evento.
O controle da impressão através de um documento HTML é algo bastante complexo, por isso que gerar um documento DOC, ou melhor dito RTF, nos permitirá resolver nosso problema de uma maneira muito efetiva.

Neste artigo desenvolveremos um exemplo prático, o de obter um certificado de assistência para cada um dos alunos que assistem a um curso.

A estratégia:
Nossa estratégia se fundamenta nos seguintes passos:

Partimos do documento em formato de Word que queremos obter.
Convertemos o formato .DOC em .RTF. (Os arquivos .RTF são de texto legível)
Introduzimos no documento .RTF uns códigos manuais que serão substituídos pelos dados procedentes do banco de dados.
Criamos uma aplicação em PHP que leia o arquivo .RTF e substitua os códigos introduzidos pelos dados buscados.

Primeiro passo, Preparar a tela:

Para nosso exemplo partimos de um documento .DOC que certifica que um aluno realizou um curso. Na seguinte imagem vemos um certificado tipo.


Será preciso criar um certificado para cada um dos alunos que realizou um curso, os dados que varia são os do aluno e os do curso realizado.

Una vez aberto o documento com Word, o salvamos em formato RTF e substituímos cada dado variável por uns códigos facilmente reconhecíveis. Atenção, o formato RTF é muito chato, por isso será preciso escrever os códigos sem se confundir para que não se introduzam caracteres raros.


No caso do exemplo utilizamos a # e o * de tal maneira que por exemplo, substituímos o nome do aluno por #*NOMBRE*#

Salvaremos o documento com o nome de plantilla.rtf

Segundo passo, O programa PHP:

Criaremos duas funções auxiliares, a primeira se chama leef().


Esta função como se pode ver, recebe como argumento o nome do arquivo RTF, o abre e armazena o conteúdo na variável de texto $todo. Esta função portanto, devolve o conteúdo de um arquivo.

A seguinte função, rtf(), é a que cria um RTF a partir de uma planilha e substituindo os códigos pelos dados da Intranet.



Esta função recebe quatro argumentos:

$sql: a instrucao sql que devolve os dados que se necessitam
$plantilla: a planilha RTF com os codigos
$fsalida: o nome do arquivo resultado
$matequivalencias: uma matriz com as equivalências entre os dados procedentes da instrução sql e os campos do certificado.
Vamos comentar linha a linha o programa:

As linhas 13 e 14 determinam o nome e a rota do arquivo de saída, utilizamos a função time() para nos assegurar de que não se produzirão dois arquivos com o mesmo nome.

Na linha 17 se armazena o conteúdo da planilha na variável $txtplantilla

Nas linhas 19 a 24 se extrai o corpo do documento RTF, o corpo do documento é o que se repete, para extraí-lo primeiro obtemos o cabeçalho do documento, o cabeçalho fica determinado pela etiqueta rtf sectd. Um documento rtf termina sempre em }, com essa informação extraímos o corpo.

No passo 3, a partir da linha 26 vamos escrevendo o arquivo resultado.

Na linha 27 escrevemos o cabeçalho do documento

Na linha 28 executamos a consulta e na 29 entramos em loop, em cada ciclo obteremos os dados de um aluno e criaremos um certificado.

Na linha 30 criamos uma cópia do corpo do documento chamada $despues, sobre essa copia realizaremos as mudanças.

Na linha 31 entramos em um loop que percorre a matriz de equivalências, a linha 32 obtém do banco de dados o dado, a linha 34 obtém da matriz o código a substituir na planilha e a linha 35 substitui o dado pelo código.

Uma vez substituídos todos os campos a linha 37 escreve o certificado do aluno e as linhas 38 e 39 geram uma quebra de página para voltar a escrever o seguinte certificado.

Uma vez que saímos do While que vai extraindo os dados, a linha 41 fecha o documento rtf e a 42 a escritura do arquivo.

Terceiro passo, Chamada à função RTF:
Uma vez criadas estas duas funções já podemos chamar à função rtf() e gerar o documento.



Comentamos as linhas:

Na linha 48 especificamos qual é a planilha.

Na linha 49 estabelecemos a instrução SQL que extrai os dados, no caso do exemplo é um pouco complexo pois extrai os dados de várias tabelas.

Nas linhas 50 a 71 criamos a matriz de equivalências, trata-se de uma matriz de duas dimensões que relaciona o código que se encontrará no arquivo RTF com o campo da instrução SQL.

A linha 72 chama à função rtf()

E por fim, as linhas 73 e 74 geram um link ao arquivo resultado.

Melhorias e comentários:
Tudo nesta vida é suscetível de ser melhorado, neste caso me resta pendente gerar o arquivo de saída diretamente ao navegador, com o objetivo de não ter que escrevê-lo no disco rígido.

Ademais, temos desenvolvidos exemplos de listagens e de etiquetas que podemos documentar em posteriores artigos.

Um aspecto importante para continuar progredindo neste tema é conhecer a sintaxe dos documentos rtf. Trata-se de um trabalho um pouco duro que também podemos abordar em posteriores artigos.





Comentários do artigo
Foram enviados 2 comentários ao artigo
2 comentários não revisados
0 comentários revisados

Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato