Produzir ficheiros no formato ODF em .NET

Introdução

Um dos desafios com que os programadores se deparam com alguma frequência é a criação de documentos de forma automática, de modo a optimizar e a reduzir o trabalho manual em aplicações de produtividade.

Quando o programador tem à sua disposição aplicações Microsoft Office, o seu trabalho está mais facilitado, especialmente se conjugado com tecnologia .NET. Mas, se quiser produzir documentos num formato aberto, como o ODF (Open Document Format), a documentação existente é muito escassa e as bibliotecas disponíveis são quase nulas e muito fracas.

Foi a necessidade de produzir documentos de texto ODF (ODT) em grande número, a partir de informação em bases de dados, que me levou a conhecer melhor este formato de ficheiros. A partir do conhecimento do formato ODF, foi possível desenvolver um mecanismo simples para o preenchimento de modelos de documentos de texto.

O intuito deste artigo é demonstrar como podemos preencher documentos através de um modelo já existente. O desenvolvimento foi feito em ASP.NET, mas o conceito pode ser extrapolado para qualquer linguagem de programação.

O Formato ODT (ODF para texto)

Para melhor entendermos este processo, necessitamos compreender a estrutura de ficheiro do documento ODT. Este documento não é mais do que um arquivo ZIP com uma estrutura definida, várias pastas e ficheiros, a maior parte em XML. Mais precisamente, trata-se de um ficheiro JAR (Java Archive). Podemos explorar o conteúdo de um ficheiro ODT de uma forma simples. Comece por criar o seu modelo de documento numa aplicação compatível, por exemplo, no LibreOffice. Experimente fazer o unZIP desse ODT, alterando previamente a extensão ODT para ZIP, se necessário. Repare que existem muitos ficheiros dentro do ZIP. No entanto, para o preenchimento dos modelos, vamos necessitar de utilizar apenas um desses ficheiros, que poderá explorar num editor de texto do tipo Notepad, o ficheiro content.xml.

Este ficheiro contém muitas meta tags, definições de formatação e, bem visível, o conteúdo do texto que escreveu no modelo. Facilmente percebemos que, ao alterar o conteúdo do content.xml, estamos a alterar o texto do documento ODT. Só teremos que colocar o ficheiro dentro do ZIP, novamente.

Há, no entanto, dois critérios a ter em conta, na construção do ficheiro ZIP:

  1. O ficheiro mimetype não deverá estar compactado;
  2. O ficheiro mimetype deverá ser o primeiro ficheiro do índice do ZIP.

Com estas duas condições, o ZIP com extensão ODT é um ficheiro válido.

Requisitos

Em .NET, este processo requer uma biblioteca de compactação ZIP. Neste caso, utilizei a biblioteca DotNetZip (Ionic.Zip.dll) para efetuar a compressão do ficheiro ODT. Os restantes componentes são os nativos de uma framework .NET 3.5 ou superior.

No caso prático que utilizei, recorri a um HTTP handler para invocar todo o processo até efetuar o download do ficheiro ODT final e o mostrar no browser. No entanto, para não estender demasiado o artigo, podemos omitir esta parte do código e mostrar apenas o processo de criação do ficheiro ZIP. O ficheiro pode ser criado sem um handler, ou até mesmo em Visual Basic/C#, numa aplicação de consola, por exemplo.

Publicado na edição 48 (PDF) da Revista PROGRAMAR.