Imprimir PDF e HTML sem abrir programa associado.

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Imprimir PDF e HTML sem abrir programa associado.

Mensagem por Itamar M. Lins Jr. »

Ola!
Pesquisei aqui o dia todo, como fazer para imprimir um arquivo PDF via linha de comando. E outras opções, sem instalar nada.
Achei para HTML a linha de comando.

Código: Selecionar todos

! 'rundll32.exe \windows\system32\mshtml.dll,PrintHTML "c:\fontes\teste\email.html" '   
Para PDF a opção melhor foi fazer download deste .EXE.
http://www.columbia.edu/~em36/pdftoprinter.html

Código: Selecionar todos

pdftoprinter c:\fontes\teste\sample.PDF
Não precisou de mais nada para imprimir no win10. O Acrobat NÃO está instalado aqui.
PS. No link tem mais outro programa bem pequeno para Criar/Modificar o PDF.
https://www.tracker-software.com/produc ... nge-viewer

Testado no WIn10.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Imprimir PDF e HTML sem abrir programa associado.

Mensagem por ANDRIL »

Boa Itamar, esta linha de comando para o HTML ir direto para impressão é uma boa dica para quem gera seus relatórios, O.S em HTML assim fica mais fácil que em PDF pelo menos para mim. Se tiver como setar a impressora fica melhor ainda, creio que pelo comando vá para a padrão definida no Windows.

PDF já é mais complicado usei em um projeto o sumatraPDF para enviar o arquivo gerado para a impressora. Tenho notado que converto uns relatórios simples para PDF e em alguns PCs não abrem, dá como arquivo corrompido.

Uso o harbour 3.2 linkando com e hbhppdf.hbc, hbzebra.hbc, talvez algo com o motor PDF instalado no pc do cliente crie alguma incompatilibidade com o que o harbour usa para geração.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Imprimir PDF e HTML sem abrir programa associado.

Mensagem por Itamar M. Lins Jr. »

Ola!
uma boa dica para quem gera seus relatórios, O.S em HTML
Como eu já crio via .PRG o HTML e abro pelo navegador preferido do cliente... Porém 80% dos relatórios são para consultas na tela, embora possam ser impresso. Imprime pouca coisa, no dia a dia.

Tem uma técnica nova para colocar dentro do .PRG o código HTML e o Harbour não mistura, não reclama quando compila o código.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Imprimir PDF e HTML sem abrir programa associado.

Mensagem por ANDRIL »

Itamar M. Lins Jr. escreveu:Tem uma técnica nova para colocar dentro do .PRG o código HTML e o Harbour não mistura, não reclama quando compila o código.
Legal, se puder compartilhar poste o exemplo.

Sempre gerei HTML dinâmico construindo as tags pelos meus programas nunca notei a dificuldade. Há também a possibilidade de desenhar o impresso em arquivo à parte com campos fixos depois é só repassar o conteúdo ao arquivo.
<html>[CABECALHO]</html> basta ler o arquivo html com memoread e repassar o conteúdo para o campo [CABECALHO].
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Imprimir PDF e HTML sem abrir programa associado.

Mensagem por Itamar M. Lins Jr. »

Ola!

Código: Selecionar todos

#xcommand TEXT TO VAR <var> => #pragma __stream|<var>:=%s   
#xcommand ENDTEXT => #pragma __endtext
Function Main
LOCAL cHtml, cStrHtml
use test.dbf

TEXT TO VAR cHtml
<!DOCTYPE html>
<html>
<head>
<title>Harbour Pagina HTML </title>

<meta charset="UTF-8"/>
 <style>
   table,th,td{
   FONT: 8pt "Courier New";
   border:none;
   border-collapse:collapse;
   color:#000000;
   }
 </style></head>
<body>
<table border="0" bgcolor=#000000 cellpadding=1 cellspacing="1">
<tr bgcolor="#FFCCCC">
<td> Primeiro Nome </td>
<td> Ultimo Nome </td>
<td> Rua </td>
<td> Cidade </td></tr>

EndText

cStrHtml := ""

Do while .not. eof()
   cStrHtml += '<tr bgcolor="#FFFFCC"><td>' + field->first + '</td>' + ;
               '<td>' + field->last + '</td>' + ;
               '<td>' + field->street + '</td>' + ;
               '<td>' + field->city + '</td></tr>' 
skip
EndDo

cStrHtml += '</table></body></html>'
cHtml := cHtml+cStrHtml

hb_memowrit('pessoas.html',cHtml)
return nil
Uma variação, pq se eu acrescentar mais 2 ou 3 linhas usando o apache já jogo esta pagina "direto" no navegador, nem preciso salvar.

Código: Selecionar todos

OutStd("Content-type: text/html" + hb_eol() )
Ou criar uma função para misturar o código.

Código: Selecionar todos

#xcommand TEXT TO VAR <var> => #pragma __stream|<var>:=%s   
#xcommand ENDTEXT => #pragma __endtext
MemVar cStrHtml
Function Main
LOCAL cHtml

cStrHtml := BrowsePessoas()

TEXT TO VAR cHtml
<!DOCTYPE html>
<html>
<head>
<title>Harbour Pagina HTML </title>

<meta charset="UTF-8"/>
 <style>
   table,th,td{
   FONT: 8pt "Courier New";
   border:none;
   border-collapse:collapse;
   color:#000000;
   }
 </style></head>
<body>
<table border="0" bgcolor=#000000 cellpadding=1 cellspacing="1">
<tr bgcolor="#FFCCCC">
<td> Primeiro Nome </td>
<td> Ultimo Nome </td>
<td> Rua </td>
<td> Cidade </td></tr>

&cStrHtml

</table></body></html>

EndText

hb_memowrit('pessoas.html',cHtml)
Return nil

Function BrowsePessoas
LOCAL cStrHtml := ""
use test.dbf
Do while .not. eof()
   cStrHtml += '<tr bgcolor="#FFFFCC"><td>' + field->first + '</td>' + ;
               '<td>' + field->last + '</td>' + ;
               '<td>' + field->street + '</td>' + ;
               '<td>' + field->city + '</td></tr>' 
skip
EndDo
close database

Return cStrHtml
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Imprimir PDF e HTML sem abrir programa associado.

Mensagem por Itamar M. Lins Jr. »

Ola!
Aqui eu puxo para a a variável cStrHtml o conteúdo, a tabela ou browse do DBF

Código: Selecionar todos

cStrHtml := BrowsePessoas()
E com a macro substituição adiciono no código HTML. (&)

Código: Selecionar todos

&cStrHtml
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Imprimir PDF e HTML sem abrir programa associado.

Mensagem por JoséQuintas »

O exemplo do Itamar modificado.

Código: Selecionar todos

PROCEDURE Main


   use \jpa\cordeiro\jpuf
   GeraHtml()
   use

   RETURN


FUNCTION GeraHtml()

   LOCAL cHtml, nCont

   cHtml := [<!DOCTYPE html>]
   cHtml += [<html>]
   cHtml += [<head>]
   cHtml += [<title>] + Alias() + [</title>]
   cHtml += [<meta charset="UTF-8"/>]
   cHtml += [<style>]
   cHtml += [table,th,td{]
   cHtml += [ FONT: 8pt "Courier New" ]
   cHtml += [ border:none ]
   cHtml += [ border-collapse:collapse]
   cHtml += [ color:#000000]
   cHtml += [ }]
   cHtml += [</style></head> ]
   cHtml += [<body>]
   cHtml += [<table border="0" bgcolor=#000000 cellpadding=1 cellspacing="1">]
   cHtml += [<tr bgcolor="#FFCCCC">]

   FOR nCont = 1 TO FCount()
      cHtml += [<td>] + FieldName( nCont ) + [</td>]
   NEXT
   cHtml += [</tr>]
   GOTO TOP
   DO WHILE ! Eof()
      cHtml += [<tr bgcolor="#FFFFCC">]
      FOR nCont = 1 TO FCount()
         cHtml += [<td>] + Transform( FieldGet( nCont ), "" )  + [</td>]
      NEXT
      cHtml += [</tr>]
      SKIP
   ENDDO
   cHtml += [</table></body></html>]
   hb_MemoWrit( "test.html", cHtml )

   RETURN NIL
tabelahtml.png
Se ao invés de DBF for um recordset ADO com resultado de um comando SQL....

Mas ainda prefiro o PDF.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Imprimir PDF e HTML sem abrir programa associado.

Mensagem por Itamar M. Lins Jr. »

Ola!
Mas ainda prefiro o PDF.
Não entendeu o espírito da coisa.
Não se trata de criar relatórios apenas, mas de perceber que isso é mais de 60% creio eu, que precisamos aprender para levar nosso aplicativo para WEB e também para acesso via mobile, não é fazer aplicações mobile num passe de mágica, mas criar alternativa para disponibilizar relatórios para acesso por qualquer coisa. E posteriormente, aprender a parte de CGI ou usando o MOD_HARBOUR, poder melhorar a interação com nossos programas.
PDF é apenas para criar DOCUMENTOS, que precisa de algum leitor. HTML é universal, protocolo HTTP, não existe protocolo PDF, e é exclusivo de ADOBE.

Isso que vc fez, é exatamente o feijão com arroz.
Mas no post que fiz está um código compilável pelo harbour, podem testar ai que funciona. É diferente pq colocamos <html> etc e o compilador aceita.
No seu exemplo vc usa cVar := "<tag></tag>" dentro de aspas. Esse é o modelo que as pessoas já sabem.
É o tal "self containe example". precisa apenas no arquivo test.dbf que está na pasta testes do harbour.
Com o programa apache vc coloca :

relatorio_x.prg

Código: Selecionar todos

#!/hb32/bin/hbrun
OutStd("Content-type: text/html" + hb_eol() )
...//código já postado mais acima
OutStd(cHtml)
Para pescar esta informação fazer funcionar no navegador basta isso:
menu de opções xyz.html

Código: Selecionar todos

 <form action="/relatorio_x.prg" method="post">
  <label for="fname">Relatório de Clientes:</label>
  <input type="submit" value="Submit">
</form> 
Aqui vc já está criando de fato um site.
Depois vc vai melhorando a parte visual para mobile/desktop.

Código: Selecionar todos

<meta name="viewport" content="width=device-width, initial-scale=1"/>
Coisas simples indo para mais complexo. Site responsivo etc...
https://www.w3schools.com/css/css_rwd_viewport.asp

PDF tem sua serventia, mas HTML é incomparável é um canivete suíço.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder