Imprimir arquivo direto para impressora
Oi Uso Delphi 6 com o quick report mesmo.
Estou precisando imprimir alguns páginas que foram copiadas da internet e quando tem relação com o produto que estiver indicado ela seja impressa automamticamente, já pesquisei aqui e encontrei algumas formas, mas elas não me ajudaram muito, não sei se eu que errei na forma ou na escrita dos comandos.
Tentei essas formas:
AssignPrn(´c:\meus documentos\registros\869.htm´,´lpt1´);
AssignPrn(´c:\meus documentos\registros\869.htm´);
AssignFile(´c:\meus documentos\registros\869.htm´,´lpt1´);
AssignFile(nomearquivo,´lpt1´);
sendo indicado uma variável nomearquivo como textfile e indicado o nome e local do arquivo desejado.
Visto que foi indicado a unit printers para as tentativas, ele não aceitou os comandos, uma hora dizendo que era tipo incompatível, faltava parâmetros, mas as formas que eu peguei e me informaram só tinha que indicar o nome do arquivo.
Agradeço antecipadamente qualquer ajuda.
Sandro
Estou precisando imprimir alguns páginas que foram copiadas da internet e quando tem relação com o produto que estiver indicado ela seja impressa automamticamente, já pesquisei aqui e encontrei algumas formas, mas elas não me ajudaram muito, não sei se eu que errei na forma ou na escrita dos comandos.
Tentei essas formas:
AssignPrn(´c:\meus documentos\registros\869.htm´,´lpt1´);
AssignPrn(´c:\meus documentos\registros\869.htm´);
AssignFile(´c:\meus documentos\registros\869.htm´,´lpt1´);
AssignFile(nomearquivo,´lpt1´);
sendo indicado uma variável nomearquivo como textfile e indicado o nome e local do arquivo desejado.
Visto que foi indicado a unit printers para as tentativas, ele não aceitou os comandos, uma hora dizendo que era tipo incompatível, faltava parâmetros, mas as formas que eu peguei e me informaram só tinha que indicar o nome do arquivo.
Agradeço antecipadamente qualquer ajuda.
Sandro
Salupe
Curtidas 0
Respostas
Massuda
17/10/2005
Do modo como você está querendo fazer, provavelmente será impresso o código HTML das páginas e acho que não é isso que você quer, certo?
Acho que o jeito mais simples para imprimir arquivos HTML é pedir para o Internet Explorer imprimir esses arquivos; Dê uma olhada [url=http://www.scalabium.com/faq/dct0127.htm]neste exemplo[/url] (em inglês).
Acho que o jeito mais simples para imprimir arquivos HTML é pedir para o Internet Explorer imprimir esses arquivos; Dê uma olhada [url=http://www.scalabium.com/faq/dct0127.htm]neste exemplo[/url] (em inglês).
GOSTEI 0
Salupe
17/10/2005
Peguei a rotina, coloquei as uses corretamente, mas ele indica que o objeto foi desconectado do cliente
Uma outra coisa, tem como eu fazer essa impressão ficar em paisagem em vez de retrato.
procedure TENTRELREGISTROS.PrintHTMLByIE(const url: string);
const
OLECMDID_PRINT = $00000006;
OLECMDEXECOPT_DONTPROMPTUSER = $00000002;
var
ie, vaIn, vaOut: Variant;
begin
ie := CreateOleObject(´InternetExplorer.Application´);
ie.Navigate(url); // neste ponto que dá o erro.
ie.Visible := True;
ie.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
end;
saberia me dizer o porque.
Uma outra coisa, tem como eu fazer essa impressão ficar em paisagem em vez de retrato.
procedure TENTRELREGISTROS.PrintHTMLByIE(const url: string);
const
OLECMDID_PRINT = $00000006;
OLECMDEXECOPT_DONTPROMPTUSER = $00000002;
var
ie, vaIn, vaOut: Variant;
begin
ie := CreateOleObject(´InternetExplorer.Application´);
ie.Navigate(url); // neste ponto que dá o erro.
ie.Visible := True;
ie.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
end;
saberia me dizer o porque.
GOSTEI 0
Massuda
17/10/2005
Testei o código e percebi que há uma demora na hora que pede para carregar a página qu causa falha na hora de imprimir (a página ainda está carregando quando manda imprimir); um jeito de evitar isso seria fazer...
Não sei como faria para imprimir a página em paisagem ao invés de retrato.
... ie.Visible := True; while ie.Busy do begin // espera carregar a página Sleep(100); end; ie.ExecWB(...
Não sei como faria para imprimir a página em paisagem ao invés de retrato.
GOSTEI 0
Salupe
17/10/2005
A rotina de espera que você acrescentou não chega nem a ser executada, pois quando chega no segundo comando, mesmo que seja o de visibilidade, ele fala que o componente foi desconectado pelo cliente. Será que está faltando algum componente no meu delphi?
GOSTEI 0
Massuda
17/10/2005
Eu testei com o site do Google (url = ´http://www.google.com.br/´) e um arquivo na minha máquina (por exemplo, url = ´file:\\c:\meus documentos\registros\869.htm´). Uso Delphi 5 e IE 6.
GOSTEI 0
Salupe
17/10/2005
O arquivo é aberto mas na hora do último comando (no ie.exewb) ele indica que :
´Tentando revogar um destino ignorado que nao foi revogado´.
O que pode ser isso?
Agradeço antecipadamente qualquer ajuda.
´Tentando revogar um destino ignorado que nao foi revogado´.
O que pode ser isso?
Agradeço antecipadamente qualquer ajuda.
GOSTEI 0
Massuda
17/10/2005
´Tentando revogar um destino ignorado que nao foi revogado´.
Não faço idéia do que possa ser.GOSTEI 0
Salupe
17/10/2005
ainda não consegui resolver esse problema.
ele ainda fala que ´foi revogado´.
será que alguem poderia me dizer qual a utilidade desses números na rotina, o que eles querem fazer.
OLECMDID_PRINT = $00000006;
OLECMDEXECOPT_DONTPROMPTUSER = $00000002;
será que não são eles que estão dando o problema.
Agradeço antecipadamente qualquer ajuda.
ele ainda fala que ´foi revogado´.
será que alguem poderia me dizer qual a utilidade desses números na rotina, o que eles querem fazer.
OLECMDID_PRINT = $00000006;
OLECMDEXECOPT_DONTPROMPTUSER = $00000002;
será que não são eles que estão dando o problema.
Agradeço antecipadamente qualquer ajuda.
GOSTEI 0
Massuda
17/10/2005
Sobre os valores...[list:5e449f3ef7][*:5e449f3ef7]OLECMDID_PRINT: comando para impressão[*:5e449f3ef7]OLECMDEXECOPT_DONTPROMPTUSER:opção de não exibir a caixa de diálogo de impressão do IE[/list:u:5e449f3ef7]...e os valores estão corretos (conferem com a unit shdocvw.pas do Delphi).
ainda não consegui resolver esse problema. ele ainda fala que ´foi revogado´.
Dando uma olhada no site da MS, encontrie um KB que [url=http://support.microsoft.com/?kbid=251133]fala desse problema[/url], mas só faria sentido se o seu Internet Explorer for muito antigo (o erro é gerado porque o IE não suporta a função solicitada). Qual a versão do seu IE?GOSTEI 0
Massuda
17/10/2005
Pesquisando um pouco mais, descobri que o IE 5.0/5.5 não permite imprimir sem exibir a caixa de diálogo. Experimente fazer desse modo...
... const OLECMDID_PRINT = $00000006; OLECMDEXECOPT_PROMPTUSER = $00000001; OLECMDEXECOPT_DONTPROMPTUSER = $00000002; var ie, vaIn, vaOut: Variant; begin ie := CreateOleObject(´InternetExplorer.Application´); ie.Navigate(url); ie.Visible := True; while ie.Busy do begin // espera carregar a página Sleep(100); end; ie.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, vaIn, vaOut); end;
GOSTEI 0
Salupe
17/10/2005
meu ie é o 6
tentei vários formatos a nova rotian que você passou e mesmo assim não funcionou. Aliás agora piorou, na primeira vez que pede, ele indica que não pode abrir o arquivo, depois na segunda que ele foi revogado.
E eu realmente preciso fazer isso.
Existe alguma outra forma de fazer essa impressão.
tentei vários formatos a nova rotian que você passou e mesmo assim não funcionou. Aliás agora piorou, na primeira vez que pede, ele indica que não pode abrir o arquivo, depois na segunda que ele foi revogado.
E eu realmente preciso fazer isso.
Existe alguma outra forma de fazer essa impressão.
GOSTEI 0
Massuda
17/10/2005
...mesmo assim não funcionou.
Fiquei sem idéias... :cry: Existe alguma outra forma de fazer essa impressão.
Acho que tem duas alternativas. Uma seria tentar fazer o Word imprimir (lembro que o Word consegue ler e imprimir HTML) e a outra seria procurar um componente de terceiros que renderizasse o HTML e que tivesse capacidade de impressão. Usar o Word parece ser mais simples do que a outra alternativa.GOSTEI 0
Dedi
17/10/2005
uso Ie6 Sp2, delphi 6 aumentei o tempo para 2000 e imprimi corretamente.........acredito que este tempo pode variar de acordo com o carregamento da pagina desejada...
GOSTEI 0
Firekiller
17/10/2005
Você poderia tentar assim:
uses ShellApi;
...
ShellExecute(Handle, ´print´,
´c:\Windows\pagina.html´, nil, nil, SW_HIDE);
uses ShellApi;
...
ShellExecute(Handle, ´print´,
´c:\Windows\pagina.html´, nil, nil, SW_HIDE);
GOSTEI 0
Salupe
17/10/2005
Funcionou
Obrigado pela ajuda pessoal.
Obrigado pela ajuda pessoal.
GOSTEI 0