Como Imprimir Arquivo HTML Dentro do Delphi?
Ola Pessoal..
Estou precisando imprimir um Arquivo HTML dentro do Delphi? Como Faço isso?
Estou precisando imprimir um Arquivo HTML dentro do Delphi? Como Faço isso?
Artinformatica
Curtidas 0
Respostas
Lucaniasalvatore
19/08/2005
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
Por favor, especifique ;)
Lucania Salvatore
GOSTEI 0
Artinformatica
19/08/2005
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?
Como fazer?
GOSTEI 0
Lucaniasalvatore
19/08/2005
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
[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
GOSTEI 0
Artinformatica
19/08/2005
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...
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...
GOSTEI 0
Lucaniasalvatore
19/08/2005
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
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
GOSTEI 0
Artinformatica
19/08/2005
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?
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?
GOSTEI 0
Sandra
19/08/2005
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.
GOSTEI 0
Lucaniasalvatore
19/08/2005
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
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
GOSTEI 0
Bon Jovi
19/08/2005
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.
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.
GOSTEI 0