No artigo de hoje, vou mostrar como fazer para gerar um HTML, abrir no navegador para que seja possível a impressão em PDF.
Existem inúmeras formas de se fazer um relatório em AdvPL, porém me perguntaram se tinha como criar um em HTML, e desse arquivo gerar um PDF.
Pois bem, até dá, com tSimpleEditor e o método SaveToPDF, porém isso acaba desconfigurando o visual do relatório.
Então o que eu recomendo, é gerar o HTML via AdvPL, e ao gerar, gravar em uma pasta temporária e já abrir pelo navegador padrão do usuário.
E aí, o usuário pode dar um Ctrl+P na página HTML e escolher a impressora padrão ou em PDF.
Abaixo um exemplo de como fazer:
// Exemplo extraído de https://www.w3schools.com/html/html_tables.asp
Static Function fTextoHtml()
Local cTextHtml := ""
Local cPasta := GetTempPath()
Local cArquivo := "relatorio_" + dToS(Date()) + "_" + StrTran(Time(), ":", "-") + ".html"
//Monta o HTML
cTextHtml += '<!DOCTYPE html>' + CRLF
cTextHtml += '<html>' + CRLF
cTextHtml += '<head>' + CRLF
cTextHtml += '<style>' + CRLF
cTextHtml += 'table {' + CRLF
cTextHtml += ' width:100%;' + CRLF
cTextHtml += '}' + CRLF
cTextHtml += 'table, th, td {' + CRLF
cTextHtml += ' border: 1px solid black;' + CRLF
cTextHtml += ' border-collapse: collapse;' + CRLF
cTextHtml += '}' + CRLF
cTextHtml += 'th, td {' + CRLF
cTextHtml += ' padding: 15px;' + CRLF
cTextHtml += ' text-align: left;' + CRLF
cTextHtml += '}' + CRLF
cTextHtml += '#t01 tr:nth-child(even) {' + CRLF
cTextHtml += ' background-color: #eee;' + CRLF
cTextHtml += '}' + CRLF
cTextHtml += '#t01 tr:nth-child(odd) {' + CRLF
cTextHtml += ' background-color: #fff;' + CRLF
cTextHtml += '}' + CRLF
cTextHtml += '#t01 th {' + CRLF
cTextHtml += ' background-color: black;' + CRLF
cTextHtml += ' color: white;' + CRLF
cTextHtml += '}' + CRLF
cTextHtml += '</style>' + CRLF
cTextHtml += '</head>' + CRLF
cTextHtml += '<body>' + CRLF
cTextHtml += '' + CRLF
cTextHtml += '<h2>Styling Tables</h2>' + CRLF
cTextHtml += '' + CRLF
cTextHtml += '<table>' + CRLF
cTextHtml += ' <tr>' + CRLF
cTextHtml += ' <th>Firstname</th>' + CRLF
cTextHtml += ' <th>Lastname</th> ' + CRLF
cTextHtml += ' <th>Age</th>' + CRLF
cTextHtml += ' </tr>' + CRLF
cTextHtml += ' <tr>' + CRLF
cTextHtml += ' <td>Jill</td>' + CRLF
cTextHtml += ' <td>Smith</td>' + CRLF
cTextHtml += ' <td>50</td>' + CRLF
cTextHtml += ' </tr>' + CRLF
cTextHtml += ' <tr>' + CRLF
cTextHtml += ' <td>Eve</td>' + CRLF
cTextHtml += ' <td>Jackson</td>' + CRLF
cTextHtml += ' <td>94</td>' + CRLF
cTextHtml += ' </tr>' + CRLF
cTextHtml += ' <tr>' + CRLF
cTextHtml += ' <td>John</td>' + CRLF
cTextHtml += ' <td>Doe</td>' + CRLF
cTextHtml += ' <td>80</td>' + CRLF
cTextHtml += ' </tr>' + CRLF
cTextHtml += '</table>' + CRLF
cTextHtml += '<br>' + CRLF
cTextHtml += '' + CRLF
cTextHtml += '<table id="t01">' + CRLF
cTextHtml += ' <tr>' + CRLF
cTextHtml += ' <th>Firstname</th>' + CRLF
cTextHtml += ' <th>Lastname</th> ' + CRLF
cTextHtml += ' <th>Age</th>' + CRLF
cTextHtml += ' </tr>' + CRLF
cTextHtml += ' <tr>' + CRLF
cTextHtml += ' <td>Jill</td>' + CRLF
cTextHtml += ' <td>Smith</td>' + CRLF
cTextHtml += ' <td>50</td>' + CRLF
cTextHtml += ' </tr>' + CRLF
cTextHtml += ' <tr>' + CRLF
cTextHtml += ' <td>Eve</td>' + CRLF
cTextHtml += ' <td>Jackson</td>' + CRLF
cTextHtml += ' <td>94</td>' + CRLF
cTextHtml += ' </tr>' + CRLF
cTextHtml += ' <tr>' + CRLF
cTextHtml += ' <td>John</td>' + CRLF
cTextHtml += ' <td>Doe</td>' + CRLF
cTextHtml += ' <td>80</td>' + CRLF
cTextHtml += ' </tr>' + CRLF
cTextHtml += '</table>' + CRLF
cTextHtml += '' + CRLF
cTextHtml += '</body>' + CRLF
cTextHtml += '</html>' + CRLF
//Grava o arquivo HTML e abre ele
MemoWrite(cPasta + cArquivo, cTextHtml)
ShellExecute("OPEN", cArquivo, "", cPasta, 1)
Return
Abaixo um print do navegador aberto, após pressionar Ctrl + P para imprimir.
Obs.: O HTML usado como referência, foi disponibilizado pela W3 Schools – https://www.w3schools.com/html/tryit.asp?filename=tryhtml_table_id2
Bom pessoal, por hoje é só.
Abraços e até a próxima.
