Você está na página 1de 12

Gerando

documentos RTF
com TPageProducer
s para web? No! Vamos resolver
problemas com solues. Veja neste artigo
de Daniel Wildt. Acesso exclusivo para
Assinantes.
0

Gostei (0)
[fechar]

(0)

Voc no gostou da qualidade deste contedo?


(opcional) Voc poderia comentar o que no lhe agradou?
617

Confirmo meu voto negativo

.
s para web? No! Vamos resolver problemas com
solues

Estes dias respondi em um frum uma pergunta de um participante, indicando


problemas para gerar um relatrio no QuickReport quando o relatrio tem mais de
uma pgina. Note que possivelmente o texto do relatrio estar includo dentro do
seu executvel. Isto muito ruim para processos de manuteno. A soluo para a
pergunta acima pode ser usando o componente para imprimir mais de um relatrio
no QuickReport (TQRmpositeReport), mas isto assunto para outra coluna. Vou
mostrar como resolver este tipo de problema usando o componente TPageProducer.

TPageProducer est na aba Web. No s para aplicaes web?

A resposta no. O TPageProducer um componente extremamente simples, mas


extremamente til para qualquer processo de troca de marcaes em arquivos em
formato Texto. Um arquivo RTF (Rich Text Format) baseado em uma linguagem
de marcao, como ocorre com o HTML,por exemplo.

O objetivo deste artigo mostrar como usar o TPageProducer para modificar o


contedo de um documento RTF que possui marcaes, como as que colocamos em
nossas pginas de internet.

O documento de teste

Veja na Figura 1 o documento que foi editado no WordPad e salvo em formato RTF.

Figura 1 Documento editado com o Wordpad. Veja as Tags transparentes no texto <#tag>

Com o componente TPageProducer, podemos indicar tags dentro do documento.


Estas tags iniciam com <# e so seguidas de uma identificao, que o nome da
tag. So terminadas com o caractere >. Exemplo: <#usuario>.

As tags tambm podem possuir parmetros. Veja na figura 1 o exemplo da tag


data, que possui o parmetro formato. Isto permite personalizar ainda mais as
informaes que sero processadas pela aplicao Delphi, dando mais liberdade a
soluo.

Iremos agora mostrar os passos para construir a aplicao de teste, que vai
manipular um documento RTF (modelo) e gerar um outro documento.

Criando a aplicao de Teste

Coloque os componentes abaixo em um formulrio para construir a aplicao que


temos na Figura 2:

Componente

Propriedade

Valor

TForm

Name

FrmPrincipal

Caption

Gerando RTF com TPageProducer

Name

EdTitulo

EditLabel.Caption

Ttulo

Name

EdUsuario

TLabeledEdit

TLabeledEdit

TLabeledEdit

TLabeledEdit

TLabeledEdit

TButton

TLabeledEdit

TButton

EditLabel.Caption

Usurio

Name

EdEMail

EditLabel.Caption

E-Mail

Name

EdDataContato

EditLabel.Caption

Data de Contato

Name

EdArquivoBase

EditLabel.Caption

Arquivo Base

Name

BtnProcurarArquivoBase

Caption

Procurar

Name

EdPastaSaida

EditLabel.Caption

Pasta Sada

Name

BtnProcurarPastaSaida

Caption

Procurar

TButton

TOpenDialog

TPageProducer

Name

BtnGerar

Caption

Gerar

Name

OpenDialog

Title

Escolha arquivo RTF

Filter

Arquivos RTF (*.rtf)|*.rtf

Name

PageProducer

Figura 2 Tela construda para testar a gerao de arquivo RTF via componente TPageProducer

Agora temos que escrever um pouco de cdigo. Vamos comear com o evento
OnCreate do Formulrio, disponvel na Listagem 1, para inicializar alguns
componentes da interface.

Listagem 1: Evento OnCreate do formulrio

procedure TFrmPrincipal.FormCreate(Sender: TObject);

begin

EdArquivoBase.Text :=

ExtractFilePath(Application.ExeName)+'base\teste.rtf';

EdPastaSaida.Text :=

ExtractFilePath(Application.ExeName)+'saida\';

OpenDialog.InitialDir :=

ExtractFilePath(Application.ExeName)+'base\';

EdDataContato.Text := FormatDateTime('dd/mm/yyyy hh:nn', now);

end;

Com isto os caminhos dos arquivos base para rodar a aplicao estaro prconfigurados, assim como o campo com a data de contato.

Caso o usurio queira selecionar outro arquivo de base para trocar as variveis,
vamos abrir um dilogo para permitir esta seleo. Veja isto na Listagem 2.

Listagem 2: Evento OnClick do boto BtnProcurarArquivoBase

procedure TFrmPrincipal.BtnProcurarArquivoBaseClick(Sender: TObject);

begin

if((OpenDialog.Execute)and

(FileExists(OpenDialog.FileName))) then

EdArquivoBase.Text := OpenDialog.FileName;

end;

Outra configurao que pode ser feita se refere pasta para sada do formulrio.
Veja o ccdogo para permitir a troca desta, na Listagem 3.

Listagem 3: Evento OnClick do boto BtnProcurarPastaSaida

procedure TFrmPrincipal.BtnProcurarPastaSaidaClick(Sender: TObject);

var

pasta : String;

begin

pasta := EdPastaSaida.Text;

if(SelectDirectory(pasta,

[sdAllowCreate, sdPerformCreate, sdPrompt],1000)) then

EdPastaSaida.Text := pasta;

end;

Vamos ao que interessa! Gerao do documento!

Vamos ao cdigo referente ao boto de gerao e depois o cdigo mais importante,


referente ao TPageProducer, que far a troca das informaes configuradas no
documento RTF.

Veja o cdigo que vai controlar a gerao do novo arquivo na Listagem 4.

Listagem 4: Evento OnClick do boto BtnGerar

procedure TFrmPrincipal.BtnGerarClick(Sender: TObject);

var TextoResultado : TStringList;

NomeArquivoSaida : String;

begin

PageProducer.HTMLFile := EdArquivoBase.Text;

TextoResultado := TStringList.Create;

NomeArquivoSaida := IncludeTrailingPathDelimiter(

EdPastaSaida.Text) +

FormatDateTime('yyyymmddhhnnsszzz',now) +

'_' + EdTitulo.Text + '.rtf';

try

TextoResultado.Text := PageProducer.Content;

TextoResultado.SaveToFile(NomeArquivoSaida);

finally

TextoResultado.Free;

end;

end;

Este cdigo vai gerar um novo documento na pasta de sada, seguindo o padro
montado na varivel NomeArquivoSaida. Se voc mandar gerar um arquivo agora,
somente com o cdigo que fizemos at o momento, vai verificar que o arquivo est
igual ao arquivo base, mas tocas marcaes como por exemplo a <#usuario>, no
esto mais includas no arquivo. Isto porque o Delphi processou as tags, mas no
encontrou o cdigo para dar um novo valor a estas tags.

Para podermos escrever este processo, iremos utilizar o evento OnHTMLTag do


componente TPageProducer. Vejamos a Listagem 5 com este cdigo, o mais
importante desta dica.

Listagem 5: Evento OnHTMLTag do componente PageProducer

procedure TFrmPrincipal.PageProducerHTMLTag(Sender: TObject; Tag:


TTag;

const TagString: String; TagParams: TStrings; var ReplaceText:


String);

begin

if(TagString = 'titulo') then

ReplaceText := EdTitulo.Text;

if(TagString = 'usuario') then

ReplaceText := EdUsuario.Text;

if(TagString = 'email') then

ReplaceText := EdEMail.Text;

if(TagString = 'data') then

begin

if(TagParams.Values['formato'] <> '') then

ReplaceText := FormatDateTime(TagParams.Values['formato'],

StrToDateTime(EdDataContato.Text))

else

ReplaceText := EdDataContato.Text;

end;

end;

Feito isto o nosso aplicativo para gerar documentos RTFs usando o componente
TPageProducer est pronto. Voc pode agora montar aquele processo para gerao
de contratos usando este tipo de soluo, extremamente simples.

Baixe o cdigo fonte com esta aplicao pronta para uso.

Leia mais em: Gerando documentos RTF com TPageProducer


http://www.devmedia.com.br/gerando-documentos-rtf-comtpageproducer/617#ixzz3nWd06XUc