Fórum Como Imprimir Arquivo HTML Dentro do Delphi? #292318

19/08/2005

0

Ola Pessoal..

Estou precisando imprimir um Arquivo HTML dentro do Delphi? Como Faço isso?


Artinformatica

Artinformatica

Responder

Posts

19/08/2005

Lucaniasalvatore

Vc poderia dizer especificamente qual a sua necessidade, pois h´pa várias maneiras de imprimir html. Vc precisa gera relatório, imprimir do webbrowser...

Por favor, especifique ;)

Lucania Salvatore


Responder

Gostei + 0

22/08/2005

Artinformatica

Preciso imprimir uma Página que é gerada pelo meu programa... Meu programa tem um módulo onde o Clinte monta uma Página html e eu preciso imprimir ela...

Como fazer?


Responder

Gostei + 0

22/08/2005

Lucaniasalvatore

Abaixo duas formas de imprimir html:

[b:6ea8e183fd]imprimir arquivo ou url usando ie browser[/b:6ea8e183fd]


uses ComObj;

procedure PrintHTMLByIE(const url: string);
const
OLECMDID_PRINT = $00000006;
OLECMDEXECOPT_DONTPROMPTUSER = $00000002;
var
ie, vaIn, vaOut: Variant;
begin
ie := CreateOleObject(´InternetExplorer.Application´);
ie.Navigate(url);
ie.Visible := True;
ie.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
end;


[b:6ea8e183fd]Exemplo de uso:[/b:6ea8e183fd]

PrintHTMLByIE(´file:\\c:\misha\webpage\index.htm´);

ou

PrintHTMLByIE(´http:\\www.scalabium.com\sme\index.htm´);

--------------------fim do 1º código------------------------

[b:6ea8e183fd]Impressão de html com banco de dados[/b:6ea8e183fd]

* Considerando uma conexão ADO, mas isso não altera o método se for outro banco de dados.


procedure TForm1.Button1Click(Sender: TObject);
var
shtml : widestring;
htmlfile : TextFile;
i : integer;
AvailableFields: set of TFieldType;
begin
AvailableFields:=[ftWideString, ftDate, ftFloat];
//open query
ADOQuery1.SQL.Text:=Edit1.Text;
ADOQuery1.Open;

// --> cria a página html

//html header
shtml:= ´<html> <head> <title>´;
shtml:= shtml + Edit1.Text;
shtml:= shtml + ´</title></head>´ + #1310;
shtml:= shtml + ´<body>´ + 1310;
shtml:= shtml + ´Tabela criada da query: ´
+ Edit1.Text + ´´ + 1310;

//table header
shtml:= shtml + ´<table border=´1´ width=´100¬´>´ + 1310;
shtml:= shtml + ´<tr>´ + 1310;
for i:=0 to AdoQuery1.FieldCount-1 do
begin
if ADOQuery1.Fields[i].DataType in AvailableFields then
begin
shtml:= shtml + ´<td>´;
shtml:= shtml +
´´ +
ADOQuery1.Fields[i].DisplayName +
´´;
shtml:= shtml + ´</td>´ + #1310;
end;
end;
shtml:= shtml + ´</tr>´ + 1310;

//table body
while not adoquery1.Eof do
begin
shtml:= shtml + ´<tr>´ + 1310;
for i:=0 to AdoQuery1.FieldCount-1 do
begin
if ADOQuery1.Fields[i].DataType in AvailableFields then
begin
shtml:= shtml + ´<td>´;
shtml:= shtml + ADOQuery1.Fields[i].AsString;
shtml:= shtml + ´</td>´ + 1310;
end;
end;
shtml:= shtml + ´</tr>´ + 1310;
ADOQuery1.Next;
end;
shtml:= shtml + ´</table>´ + 1310;

shtml:= shtml + ´</body></html>´;
// --> escreve no memo
Memo1.Text := shtml;

// --> salva em arquivo htm
AssignFile(htmlfile,
ChangeFileExt(
Application.ExeName,´.htm´));
Rewrite(htmlfile);
WriteLn(htmlfile, shtml);
CloseFile(htmlfile);


// --> abre o arquivo no navegador
WebBrowser1.Navigate(ChangeFileExt(
Application.ExeName,´.htm´));

end;

-----------------------fim do 2º código------------------------

Se não resolver esses dois, por favor me diga como o código é gerado e nós acharemos a função necessária.

Boa programação,

Lucania Salvatore


Responder

Gostei + 0

23/08/2005

Artinformatica

Caro LucaniaSalvatore,

Cara minha função é parecida com a sua função de imprimir HTML do Banco de dados..

Eu tenho uma Função que vai varrendo meu banco de dados de Clientes e gerando um HTML, como se fosse uma carta para o Cliente... e preciso mandar esse arquivo para impressora...

É mais ou menos como a 2ª Função que vc passou.. mas em vez de abrir no WebBrowser, eu preciso mandar direto para Impressão.

A primeira funcção que vc me mandou até resolveria.. mas fico com medo de ficar muito lento... porque preciso imprimir uma carta para cada cliente do meu Banco de Dados... mas vou testar a primeira função de qualquer forma...

Valeu ai pela ajuda...


Responder

Gostei + 0

24/08/2005

Lucaniasalvatore

Bom dia, artinformatica.

Vc pode usar a primeira função porque abre direto o diálogo da impressora:

PrintHTMLByIE(´file:\\´+extractfilepath(application.exename)+´temp\suapagina.html´);

ou

PrintHTMLByIE(´file:\\c:\pasta\suapagina.html´);

na verdade, eu uso os dois códigos que eu postei acima. Um para gerar o html e esse para impressão. Esse não tem preview, vai direto.

Se vc quiser usar preview eu tenho um código feito com o componente synEdit. É so falar que eu te passo.

Boa programação,

Lucania Salvatore


Responder

Gostei + 0

24/08/2005

Artinformatica

Oi Cara.. realmente funciona as funcções que vc me mandou.. só tem um problema...

Quando imprimi pelo Internet Explorer.. ele coloca no Top da Página.. o nome da Página e o número da Páginda.. e no Rodapé ele coloca o caminho do arquivo que ele está imprimindo.... será que tem como tirar essas informações da impressão?


Responder

Gostei + 0

24/08/2005

Sandra

Quando imprimi pelo Internet Explorer.. ele coloca no Top da Página.. o nome da Página e o número da Páginda.. e no Rodapé ele coloca o caminho do arquivo que ele está imprimindo....
artinf,

Acesse o menu Arquivo > Configurar página > Cabeçalho e Rodapé do Internet Explorer; estes campos devem estar em branco. Não sei se existe a possibilidade de configurá-los através do delphi.


Responder

Gostei + 0

24/08/2005

Lucaniasalvatore

Boa noite.

Eu testei novamente o código que te passei só que desabilitei a opção do menu no IE.

Com isso, o header e footer não foram impressos. Tente as opções abaixo:

ie.addressbar:=false;
ie.menubar:=false;
//ie.Statusbar:=true;
//ie.toolbar:=0;
//ie.registerasbrowser:=true;
//ie.Navigate(filename);
//ie.visible:=true;
//except
//showmessage(´Erro´);
//end;

Boa programação,

Lucania Salvatore


Responder

Gostei + 0

25/08/2005

Bon Jovi

Dá pra mudar via Delphi o cabeçalho/rodape do Internet Explorer, alterando no registry (HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup ... header/footer). Lembrando que vai alterar a configuração do Internet Explorer do usuário e não só sua instância do WebBrowser.

Existe uma opção melhor de preview/impressão HTML, que é o HtmlViewer: http://pbear.com/htmlviewers.html . A versão free não sei se te satisfaz, nem nunca usei. Uso a versão professional, q tá $99. Esse HtmlViewer permite alterar o cabeçalho e rodapé via canvas, onde pode colocar até um bitmap se quiser. Senao for precisar dessas coisas, fique com o MS WebBrowser mesmo, pois é mais fácil de usar.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar