Imprimir arquivo direto para impressora

Delphi

17/10/2005

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


Salupe

Salupe

Curtidas 0

Respostas

Massuda

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).


GOSTEI 0
Salupe

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.


GOSTEI 0
Massuda

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...
...
  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

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

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

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.


GOSTEI 0
Massuda

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

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.


GOSTEI 0
Massuda

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

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

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.


GOSTEI 0
Massuda

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

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

Firekiller

17/10/2005

Você poderia tentar assim:

uses ShellApi;
...
ShellExecute(Handle, ´print´,
´c:\Windows\pagina.html´, nil, nil, SW_HIDE);


GOSTEI 0
Salupe

Salupe

17/10/2005

Funcionou

Obrigado pela ajuda pessoal.


GOSTEI 0
POSTAR