Fórum Como Imprimir Arquivo HTML Dentro do Delphi? #292318
19/08/2005
0
Estou precisando imprimir um Arquivo HTML dentro do Delphi? Como Faço isso?
Artinformatica
Curtir tópico
+ 0Posts
19/08/2005
Lucaniasalvatore
Por favor, especifique ;)
Lucania Salvatore
Gostei + 0
22/08/2005
Artinformatica
Como fazer?
Gostei + 0
22/08/2005
Lucaniasalvatore
[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
23/08/2005
Artinformatica
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
24/08/2005
Lucaniasalvatore
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
24/08/2005
Artinformatica
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
24/08/2005
Sandra
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
24/08/2005
Lucaniasalvatore
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
25/08/2005
Bon Jovi
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
Clique aqui para fazer login e interagir na Comunidade :)