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.