Página 1 de 1

Imprimir PDF e HTML sem abrir programa associado.

Enviado: 23 Mai 2020 20:44
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.

Imprimir PDF e HTML sem abrir programa associado.

Enviado: 24 Mai 2020 11:50
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.

Imprimir PDF e HTML sem abrir programa associado.

Enviado: 24 Mai 2020 14:19
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.

Imprimir PDF e HTML sem abrir programa associado.

Enviado: 24 Mai 2020 17:06
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].

Imprimir PDF e HTML sem abrir programa associado.

Enviado: 25 Mai 2020 16:08
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.

Imprimir PDF e HTML sem abrir programa associado.

Enviado: 25 Mai 2020 16:13
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.

Imprimir PDF e HTML sem abrir programa associado.

Enviado: 25 Mai 2020 17:40
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.

Imprimir PDF e HTML sem abrir programa associado.

Enviado: 25 Mai 2020 18:29
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.