HTML 2 PDF -> Caminho das pedras!

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

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

HTML 2 PDF -> Caminho das pedras!

Mensagem por Itamar M. Lins Jr. »

Olá!
PDF usando HTML facim, facim!

Código: Selecionar todos

cHtml := '<!DOCTYPE html><html><head>'
   cHtml += '<link rel="stylesheet" type="text/css" href="/print.css" media="print" />'
   cHtml += '<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>'
   cHtml += '<title>Orçamento</title>'   
   cHtml += '<style>'
   cHtml += 'table,th,td{'
   cHtml += '  FONT: 12pt "Courier New";'
   cHtml += '  border: 1px solid #888;'
   cHtml += '  border-collapse:collapse;'
   cHtml += '  color:#000000;'
   cHtml += '  table-layout: fixed; width: auto'
   cHtml += '}'

   cHtml += 'p.quebra { page-break-before: always }'
   cHtml += 'ft.a { font: 14px Arial; font-weight: bold ; } '
   cHtml += 'ft.b { font: 11px sans-serif; }'
   cHtml += 'ft.c { font: 12px Arial; }'
   cHtml += 'ft.d { font: 13px Arial; }'
   cHtml += '.zebra tbody tr:nth-child(2n+2) { background: #ccc; } '
   cHtml += '</style>'
   cHtml += '</head><body><div align="center">'

   cHtml += '<table cellpadding="1" cellspacing="1">'
   
   cHtml += '<col width="150px"/>'
   cHtml += '<col width="990px"/>'
   cHtml += '<col width="260px"/>'

   cHtml += '<tr>'
   cHtml += '<td> <img src="./imagens/logoempresa.png" width="125" height="76" alt="Logo Empresa" > </td>'
   cHtml += '<td  align="center" style="font-family:verdana;font-weight:bold">' + em->empresa  
   cHtml += '<br> <ft class="b"> ' + AllTrim(em->endereco) + ", Nº " + em->numero + ", " + AllTrim(em->cidade) + "/" + em->uf
   cHtml += '<br> Fone: ' + Transform(alltrim(em->telefone),'@R (99) 9999-9999') 
   cHtml += '  --  <img src="./imagens/whatsapp_.jpg" width="16" height="16" alt="Logo zap" > ' 
   cHtml += Transform(alltrim(em->whatsapp),'@R (99) 99999-9999') + '</td>'
   cHtml += '<td> <ft class="a"> Orçamento PDV: ' + StrZero(nPDV,3) + '</ft><br>' + str(day(dDia),2)+"/"+SubStr(CMonth(dDia),1,3)+'/'+str(year(dDia),4)+'<br>'+ampm(Transform(cHora,"@R 99:99:99")) 
   cHtml += '</td></tr></table>'
   
   cHtml += '<table cellpadding="1" cellspacing="1">'
   
   cHtml += '<col width="1000px"/>'
   cHtml += '<col width="700px"/>'
   
   cHtml += '<tr><td colspan=2> Cliente: ' + cCliente + '</td>'   
   cHtml += '<tr><td colspan=2> Vendedor: ' + pd->vendedor
   cHtml += '</td></tr>'      
   cHtml += '</table>'
   
   cHtml += '<table cellpadding="1" cellspacing="1" class="zebra">'
   cHtml += '<col width="100px"/>'
   cHtml += '<col width="780px"/>'
   cHtml += '<col width="100px"/>'
   cHtml += '<col width="100px"/>'
   cHtml += '<col width="100px"/>'
   cHtml += '<col width="100px"/>'
   cHtml += '<col width="100px"/>'

   cHtml += '<tr>'
   cHtml += '<th> Código </th>'
   cHtml += '<th> Descrição </th>'
   cHtml += '<th> Qtd.Und. </th>'
   cHtml += '<th> A VISTA </th>'
   cHtml += '<th> TOTAL </th>'
   cHtml += '<th> A PRAZO </th>'
   cHtml += '<th> Total </th></tr>'

   nTotAvista := 0; nTotAprazo := 0 //; nSemDesc:= 0; nDesconto :=  0

   Do WHILE pd->(!eof())

      if eq->(DbSeek( pd->cod_mercad) )
      else
         hwg_Msginfo('Não Foi Encontrado no Estoque')
         pd->(DbSkip())
         loop
      endif
  
      cHtml += '<tr>'
           
      cHtml += '<td><ft class="c">' + pd->cod_mercad + '</c></td>'
      cHtml += '<td><ft class="d">' + pd->mercadoria + '</d></td>'

      if es->(dbseek(eq->unidade))
         if es->precisao = 0
            cHtml += '<td align=right>' + Transform( pd->quantidade,'99,999,999')+ '</td>'
         elseif es->precisao = 1
            cHtml += '<td align=right>' + Transform( pd->quantidade,'9999,999.9')+ '</td>'
         elseif es->precisao = 2
            cHtml += '<td align=right>' + Transform( pd->quantidade,'999,999.99')+ '</td>'
         elseif es->precisao = 3
            cHtml += '<td align=right>' + Transform( pd->quantidade,'99,999.999')+ '</td>'
         endif
      else
         cHtml += '<td align=right>'+transform( pd->quantidade,'99,999,999')+ '</td>'
      endif
        
        cHtml += '<td align=right>' + transform( pd->preco_unit,'@e 9999,999.99') + '</td>'
        cHtml += '<td align=right>' + transform(Round( pd->quantidade* pd->preco_unit,2),'@e 9999,999.99')+'</td>'

        cHtml += '<td align=right>' + transform(eq->prazo                         ,'@e 9999,999.99') + '</td>'
        cHtml += '<td align=right>' + transform(Round(eq->prazo*pd->quantidade,2) ,'@e 9999,999.99') + '</td></tr>'

        nTotAvista += Round(pd->quantidade*pd->preco_unit,2)
        nTotAprazo += Round(pd->quantidade*eq->prazo,2)
        
        pd->(dbskip())

   EndDo
      
    IF (nSemdesc-nTotal) > 0
        cHtml += '<tr><td colspan=7> Total Sem Desconto: ' + Transform(nSemdesc,'@e 9999,999.99') + '</td></tr>'
        cHtml += '<tr><td colspan=7> Desconto de: ' + Transform(nSemdesc-nTotal,'@e 9999,999.99') + '</td></tr>'
    endif

    cHtml += '<tr><td colspan=4> Total do Orçamento: ' + '<td align=right>' + Transform(nTotAvista-nDescTot,'@e 9999,999.99')+'</td>'
    cHtml += '<td colspan=2 align=right>' + Transform(nTotAprazo,'@e 9999,999.99') + '</td></tr>'
   
   cHtml += '</table>'  
   cHtml += '</div></body></html>'

   hb_MemoWrit("orcamento.html",cHtml)

Com PDF ZEBRADO etc, etc.... TODAS as firulas desses geradores de relatórios ! Imagens etc, etc, etc e é claro etc!
HTML + CSS é o caminho !

Cereja do bolo!

Código: Selecionar todos


   IF !Empty(cEmail) //Mandar EMAIL PDF vapt, vupt ! Via linha de comando usando o CHROME para gerar o PDF. Fica na pasta Meus Documentos do win.
      //VIA DOS usar aspas duplas ' "\Program Files (x86)\Google\Chrome\Application\chrome.exe" ...' 
      //hb_MemoWrit("comando.bat", cComando)
      cArq := hb_GetEnv("USERPROFILE") + "\Documents\" + 'orçamento_' + AllTrim(cEmail)+'.pdf'
      cComando := '\Program Files (x86)\Google\Chrome\Application\chrome.exe --headless --disable-gpu --print-to-pdf="' + cArq + '" "' + cDirSist+'orcamento.html"'
      hb_processRun( cComando,,@cStdOut,@cStdErr,.T. )
      Email(cArq,cSubject,cBody,cEmail,cArq)
      //hwg_msginfo(cStdOut)
      //hwg_msginfo(cStdErr)      
   ENDIF
   hwg_Shellexecute("orcamento.html","open",,cDirSist,1)   //USE HB_PROCESSRUN quem não usa HWGUI !
Depois eu posto a tela como fica. E a Cta PIX para o cafezinho!

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

HTML 2 PDF -> Caminho das pedras!

Mensagem por Itamar M. Lins Jr. »

Olá!
Imagem de como fica.
Screenshot_20220314_222858.png
Mais simples que aprender a usar a lib tal LIBXYPDF, LIBAAAPDF...
E com a vantagem de ter milhões de exemplos na internet e não depender de lib nenhuma, aprendizado que não se perde.
orçamento_xxxxxx@gmail.com.pdf
(177.74 KiB) Baixado 328 vezes
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

HTML 2 PDF -> Caminho das pedras!

Mensagem por Poka »

Obrigado Itamar.



Poka
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

HTML 2 PDF -> Caminho das pedras!

Mensagem por JoséQuintas »

Não gostei, achei muito complicado.
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

HTML 2 PDF -> Caminho das pedras!

Mensagem por Itamar M. Lins Jr. »

Olá!
Não gostei, achei muito complicado.
Lógico que tem os níveis, ai está no nível médio-simples de dificuldade ;-)
Pode tirar o CSS... para começar a aprender.

Código: Selecionar todos

<html>
Meu texto CRU SEM NADA
</html>
//Salvar Arquivo html
//Transformar em PDF na pasta meus documentos.
      cArq := hb_GetEnv("USERPROFILE") + "\Documents\" + 'orçamento_' + AllTrim(cEmail)+'.pdf'
 cComando := '\Program Files (x86)\Google\Chrome\Application\chrome.exe --headless --disable-gpu --print-to-pdf="' + cArq + '" "' + cDirSist+'orcamento.html"'
Vai aprender HTML que é mais fácil que aprender comandos de LIBS que não está mais evoluindo.
HTML vai sempre servir, e aprender com os exemplos da internet é mais fácil.
O que não falta são professores e exemplos para ensinar.

Seu guru passa a ser STACK OVERFLOW ixi !

Sem falar de gráficos e tudo mais que é possível VIVO! não é estático.
E se usar mod_harbour vai dar um UP nos nossos sistemas.

Leia as entrelinhas, por trás desse exemplo tem um universo de possibilidades.

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

HTML 2 PDF -> Caminho das pedras!

Mensagem por Itamar M. Lins Jr. »

Olá!
Não gostei, achei muito complicado.
Se tiver um exemplo com esse poder de fogo e tão fácil quanto usar HTML, gostaria de ver.
Quanto mais simples para nós melhor.

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

HTML 2 PDF -> Caminho das pedras!

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Se tiver um exemplo com esse poder de fogo e tão fácil quanto usar HTML, gostaria de ver.
Quanto mais simples para nós melhor.
OOHG tem isso fácil faz tempo.

Mas não tenho mais saco de discutir com teimoso, que só vale o que ele usa, é perda de tempo.
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

HTML 2 PDF -> Caminho das pedras!

Mensagem por Itamar M. Lins Jr. »

Olá!
OOHG tem isso fácil faz tempo.
O link please!
Tem nada de discussão, mostre o código e estamos conversados.
HTML usa em qualquer Harbour ou xHarbour sem LIB nenhuma, PHP, Java, etc... OOHG depende de A + B.
HTML é a árvore(Raiz) é o MASTER, não é periferia de linguagens.

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

HTML 2 PDF -> Caminho das pedras!

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu: O lInk please!
Tem nada de discussão, mostre o código e estamos conversados.
HTML usa em qualquer Harbour ou xHarbour sem LIB nenhuma, PHP, Java, etc... OOHG depende de A + B.
HTML é a árvore(Raiz) é o MASTER, não é periferia de linguagens.
Vai dizer que com tanta pesquisa que faz na internet, não consegue digitar no google OOHG?

Como eu disse, não tenho mais saco, acabou de comprovar que é perda de tempo.
Fique com seu html.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

HTML 2 PDF -> Caminho das pedras!

Mensagem por JoséQuintas »

Código: Selecionar todos

         POPUP "File 3"
   			ITEM 'report form hbprinter'  ACTION repof( "HBPRINTER" )
            ITEM 'report form MINIPRINT'  ACTION repof( "MINIPRINT" )
            ITEM 'report form TXT'        ACTION repof( "TXTPRINT" )
            ITEM 'report form DOS'        ACTION repof( "DOSPRINT" )
            ITEM 'report form RAW'        ACTION repof( "RAWPRINT" )
            ITEM 'report form excelprint' ACTION repof( "EXCELPRINT" )
            ITEM 'report form Opencalc'   ACTION repof( "CALCPRINT" )
            ITEM 'report form RTF'        ACTION repof( "RTFPRINT" )
            ITEM 'report form CSV'        ACTION repof( "CSVPRINT" )
            ITEM 'report form HTML'       ACTION repof( "HTMLPRINT" )
            ITEM 'report form PDF'        ACTION repof( "PDFPRINT" )
            ITEM "SpreadSheet"            ACTION repof( "SPREADSHEETPRINT" )
         END POPUP
Uia
UMA das opções é html.
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

HTML 2 PDF -> Caminho das pedras!

Mensagem por Itamar M. Lins Jr. »

Olá!
Puxa que exemplo legal.
Parabéns !
Vai dizer que com tanta pesquisa que faz na internet, não consegue digitar no google OOHG?
Eu não disse que não tinha, disse que esse exemplo que postei é MAIS SIMPLES.
Eu agora tenho que mostrar mais o quê ?

Se eu não achei via MINIPRINT, etc nada parecido, isso desde muito tempo e postei esse em HTML vc disse que OOHG é mais simples... Eu que tenho que procurar ? Se eu já sei que não tem, e que é mais difícil e limitado. Cadê o seu exemplo mais fácil ?

Todo mundo quer saber. Não apenas sou eu o interessado. Se tem vamos usar! Beneficie todos nós que precisamos.


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

HTML 2 PDF -> Caminho das pedras!

Mensagem por alxsts »

Olá!

Deixando de lado as paixões e azedumes pessoais, e o fato de ser fácil ou difícil, o resultado visual é bonito.
[]´s
Alexandre Santos (AlxSts)
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

HTML 2 PDF -> Caminho das pedras!

Mensagem por Itamar M. Lins Jr. »

Olá!
Vai usar JavaScript onde ? Vai usar CSS onde ? Vair usar PHP onde ? Vai usar Chrome/Edge... onde ? Usar Python na WEB onde ? Sem HTML não tem WEB.

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

HTML 2 PDF -> Caminho das pedras!

Mensagem por Itamar M. Lins Jr. »

Olá!
Deixando de lado as paixões e azedumes pessoais, e o fato de ser fácil ou difícil, o resultado visual é bonito.
Mas é exatamente isso que está acontecendo.
Se é difícil ? OK. Mas é difícil em relação a qual opção ? Que opção temos mais fácil ?
Porque usando Hwgui, podem ir lá no SVN para ler umas 3,4... mensagens minhas relatando BUGs do HWReport.

Eu estou na pesquisa p/ encontrar códigos fáceis.
Esses outros da Minigui e OOHG que é a mesma coisa eu já tinha visto alhures... E não achei simples, mas se tiver um exemplo igual a esse que postei é bom saber.

Linha para fazer o ZEBRADO!

Código: Selecionar todos

   cHtml += '.zebra tbody tr:nth-child(2n+2) { background: #ccc; } '
Nossa que dificuldade!!! Peguei em menos de 1 minuto na internet pronto, centenas de exemplos...

Linha para aplicar ZEBRADO na TABELA!

Código: Selecionar todos

   cHtml += '<table cellpadding="1" cellspacing="1" class="zebra">'
E muitas outras coisas que tem, já no simples fato de usar qualquer navegador para exibir, imprimir enviar email.

TUDO em 1 LINHA!

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

HTML 2 PDF -> Caminho das pedras!

Mensagem por Itamar M. Lins Jr. »

Olá!
E tem que rodar no LINUX! No ANDROID, iPhone...

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