Essa dica é para quem criar criar um modelo no LibreOffice Writer e depois usa-lo para
imprimir o mesmo no Scriptcase usando o comando shell wkhtmltopdf (Windows/Linux)
Somente usado em hospedagens Dedicadas ou VPS, porque tem que instalar
o wkhtmltopdf via linha de comando para que o PHP possa executar ele
com o comando shell_exec(…
Coloque o nome dos campos iniciados e finalizados com ‘x’, para podermos fazer o Replace
‘Troca’ no html pela codificação no evento do Scriptcase.
Exemplo campo Nome = xNomex
Sempre que criar um Modelo no LibreOffice Writer gravar e guardar ele
com a extensão .odt na pasta de modelos do cliente, ai vamos
exportar ele para .XHTML no Writer mesmo.
Na hora que for feita a conversão final para o .html o arquivo ficará automaticamente
em UTF8, que é o mesmo padrão que adotamos atualmente no Scriptcase.
CONVERTER HTML EM PDF
/*
Criar Botão Scriptcase no formulário Tipo PHP com Target = Outra Janela.
Site oficial wkhtmltopdf para baixar e instalar a versão Windows 64, no Linux é instalação via linha de comando.
Windows: https://wkhtmltopdf.org/downloads.html
Linux Exemplo: https://tecadmin.net/convert-html-to-pdf-using-qtwebkit-with-php/
Modelo Original informe_vencimento_.odt LibreOffice Writer
Exportado como .XHTML e convertido em .html
Converter o XHTML para HTML
https://products.aspose.app/words/pt/conversion/xhtml-to-html
Formatar o Html Ficar formatado bonito.
https://www.freeformatter.com/html-formatter.html
Corrigir Alinhamento para Direita Nº Faturamento ele fica em <p class="P4" align="right"><span>xFaturamentoIDx</span></p>
ai sabemos que é "P4".
Procurar:
.P4 { text-align:left
Trocar para:
.P4 { text-align:right
Caso precisar saltar a página:
Editar o .html e colocar no final Salto de Página: <div style="break-after:page">:
Procurar por:
</head>
<body>
<div>
Trocar por:
</head>
<body>
<div style="break-after:page">
Incorporação de Html = Metódo HEREDOC EOD
$_Html_Original = <<<HTML
<html>
<head>
<body>
...
...
</body>
</html>
HTML;
*/
// Colar Todo o Html entre <<<HTML e HTML;
$_Html_Original = <<<HTML
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="Aspose.Words for .NET 21.7.0" />
<title>- no title specified</title>
<style type="text/css">body { font-family:'Times New Roman'; font-size:12pt }h1, h2, h3, h4, h5, h6, p { margin:0pt }table { margin-top:0pt; margin-bottom:0pt }h1 { margin-top:12pt; margin-bottom:0pt; page-break-inside:avoid; page-break-after:avoid; font-family:'Times New Roman'; font-size:24pt; font-weight:bold; font-style:normal; color:#2f5496 }h2 { margin-top:2pt; margin-bottom:0pt; page-break-inside:avoid; page-break-after:avoid; font-family:'Times New Roman'; font-size:18pt; font-weight:bold; font-style:normal; color:#2f5496 }h3 { margin-top:2pt; margin-bottom:0pt; page-break-inside:avoid; page-break-after:avoid; font-family:'Times New Roman'; font-size:14pt; font-weight:bold; font-style:normal; color:#1f3763 }h4 { margin-top:2pt; margin-bottom:0pt; page-break-inside:avoid; page-break-after:avoid; font-family:'Times New Roman'; font-size:12pt; font-weight:bold; font-style:normal; color:#2f5496 }h5 { margin-top:2pt; margin-bottom:0pt; page-break-inside:avoid; page-break-after:avoid; font-family:'Times New Roman'; font-size:10pt; font-weight:bold; font-style:normal; color:#2f5496 }h6 { margin-top:2pt; margin-bottom:0pt; page-break-inside:avoid; page-break-after:avoid; font-family:'Times New Roman'; font-size:8pt; font-weight:bold; font-style:normal; color:#1f3763 }.P1 { writing-mode:lr-tb; font-family:'Liberation Serif'; font-size:12pt }.P10 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:11pt }.P11 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:11pt }.P12 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:11pt; font-weight:bold }.P13 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:10pt }.P14 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:10pt; font-weight:bold }.P2 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:11pt }.P3 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:11pt; font-weight:bold }.P4 { text-align:right; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:16pt; font-weight:bold }.P5 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:10pt }.P6 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:10pt; font-weight:bold }.P7 { text-align:center; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:12pt; font-weight:bold }.P8 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:12pt; font-weight:bold }.P9 { text-align:left; line-height:normal; writing-mode:lr-tb; font-family:Arial; font-size:20pt }span.Heading1Char { font-family:'Calibri Light'; font-size:16pt; color:#2f5496 }span.Heading2Char { font-family:'Calibri Light'; font-size:13pt; color:#2f5496 }span.Heading3Char { font-family:'Calibri Light'; font-size:12pt; color:#1f3763 }span.Heading4Char { font-family:'Calibri Light'; font-style:italic; color:#2f5496 }span.Heading5Char { font-family:'Calibri Light'; color:#2f5496 }span.Heading6Char { font-family:'Calibri Light'; color:#1f3763 }span.T1 { font-weight:bold }.Tabela1 { }.Tabela2 { }</style>
</head>
<body>
<div style="break-after:page">
<p class="P1" style="margin-top:12.2pt; margin-right:14.15pt; margin-left:14.15pt"><span> </span></p>
<table cellspacing="0" cellpadding="0" class="Tabela1" style="width:561.4pt; margin-left:14.4pt; border-collapse:collapse">
<tr>
.......
.......
....... etc.
</table>
<p class="P1" style="margin-right:14.15pt; margin-left:14.15pt; margin-bottom:12.2pt"><span> </span></p>
</div>
</body>
</html>
HTML;
$_FaturamentoID = {FaturamentoID};
/* Macro sc_lookup */
$sql ="
SELECT
fat.GraficaID AS GraficaID,
fat.FaturamentoID AS FaturamentoID,
fat.EmitirParaID AS EmitirParaID,
fat.FaturarParaID AS FaturarParaID,
fp.VencimentoData AS VencimentoData,
fp.VencimentoValor AS VencimentoValor,
fat.CodigoContaID AS CodigoContaID,
fat.InformacoesUsoGrafica AS InformacoesUsoGrafica,
fat.InformeEmissao AS InformeEmissao,
fat.InformeEmitidoPor AS InformeEmitidoPor
FROM
faturamento_parcelas fp
INNER JOIN faturamento fat ON fp.FaturamentoID = fat.FaturamentoID
WHERE
fp.FaturamentoID = $_FaturamentoID
";
sc_lookup(chk_fat, $sql);
/* Erro no lookup */
if (FALSE === {chk_fat}) {
echo "Ocorreu um erro no acesso ao<BR>banco de dados: $sql.<BR>";
}
elseif (empty({chk_fat})) { /* EOF */
echo "Nenhum valor foi retornado pelo banco.<BR>";
}
else {
/* Inclua aqui sua rotina de processamento */
$_GraficaID = {chk_fat[0][0]};
$_FaturamentoID = {chk_fat[0][1]};
$_EmitirParaID = {chk_fat[0][2]};
$_FaturarParaID = {chk_fat[0][3]};
$_VencimentoData = DataX({chk_fat[0][4]});
$_VencimentoValor = ValorX({chk_fat[0][5]}, 2);
$_CodigoContaID = {chk_fat[0][6]};
$_InformacoesUsoGrafica = {chk_fat[0][7]};
$_InformeEmissao = DataX({chk_fat[0][8]});
$_InformeEmitidoPor = {chk_fat[0][9]};
}
if (empty($_FaturarParaID)) {
$_FaturarParaID = $_EmitirParaID;
}
/* Macro sc_lookup */
$sql ="
SELECT
Nome,
Razao,
CPF_CPNJ,
DOCTO,
NFe_InscricaoMunicipal,
CNAE,
LogoTipo,
SiteEmpresa,
NFe_Endereco,
NFe_Numero,
NFe_Bairro,
NFe_Cidade,
NFe_UF,
NFe_CEP,
NFe_Telefone,
NFe_email
FROM
graficas
WHERE
GraficaID = $_GraficaID
";
sc_lookup(chk_graf, $sql);
/* Erro no lookup */
if (FALSE === {chk_graf}) {
echo "Ocorreu um erro no acesso ao<BR>banco de dados: $sql.<BR>";
}
elseif (empty({chk_graf})) { /* EOF */
// CONTINUA...
}
else {
/* Inclua aqui sua rotina de processamento */
$_Nome = {chk_graf[0][0]};
$_Razao = {chk_graf[0][1]};
$_CPF_CPNJ = {chk_graf[0][2]};
$_DOCTO = {chk_graf[0][3]};
$_NFe_InscricaoMunicipal = {chk_graf[0][4]};
$_CNAE = {chk_graf[0][5]};
$_LogoTipo = {chk_graf[0][6]};
$_SiteEmpresa = {chk_graf[0][7]};
$_NFe_Endereco = {chk_graf[0][8]};
$_NFe_Numero = {chk_graf[0][9]};
$_NFe_Bairro = {chk_graf[0][10]};
$_NFe_Cidade = {chk_graf[0][11]};
$_NFe_UF = {chk_graf[0][12]};
$_NFe_CEP = {chk_graf[0][13]};
$_NFe_Telefone = {chk_graf[0][14]};
$_NFe_email = {chk_graf[0][15]};
$_Imagem = base64_encode($_LogoTipo);
$_LogoTipo="<img border=0 src='data:image/jpeg;base64,$_Imagem'>";
$_GraficaRazao = $_Razao;
$_GraficaLinha01 = $_Razao . ' - CNPJ: ' . CPFX($_CPF_CPNJ) .
' - I.E.: ' . $_DOCTO . ' - I.M.: ' . $_NFe_InscricaoMunicipal;
$_GraficaLinha02 = $_NFe_Endereco . ' No. ' . $_NFe_Numero. ' - ' . $_NFe_Bairro .
' - ' . $_NFe_Cidade . ' - ' . $_NFe_UF .
' - CEP ' . CEPX($_NFe_CEP);
$_GraficaLinha03 = 'Telefone: ' . FoneX($_NFe_Telefone) .
' Atendimento: de 2a a 6a-Feira - das 8h as 18h - ' . $_SiteEmpresa;
}
// TROCA CAMPOS da VARIAVEL $_Html
$_Html = $_Html_Original;
$_Html = str_replace('xLogoTipox', $_LogoTipo, $_Html);
$_Html = str_replace('xGraficaRazaox', $_GraficaRazao, $_Html);
$_Html = str_replace('xInformeEmissaox', $_InformeEmissao, $_Html);
$_Html = str_replace('xInformeEmitidoPorx', $_InformeEmitidoPor, $_Html);
$_Html = str_replace('xFaturamentoIDx', $_FaturamentoID, $_Html);
$_Html = str_replace('xClienteRazaox', $_ClienteRazao, $_Html);
$_Html = str_replace('xClienteNomex', $_ClienteNome, $_Html);
$_Html = str_replace('xEndereco01x', $_Endereco01, $_Html);
$_Html = str_replace('xEndereco02x', $_Endereco02, $_Html);
$_Html = str_replace('xTelefonex', $_Telefone, $_Html);
$_Html = str_replace('xContatox', $_Contato, $_Html);
$_Html = str_replace('xVencimentoDatax', $_VencimentoData, $_Html);
$_Html = str_replace('xVencimentoValorx', $_VencimentoValor, $_Html);
$_Html = str_replace('xCodigoConta01x', $_CodigoConta01, $_Html);
$_Html = str_replace('xCodigoConta02x', $_CodigoConta02, $_Html);
$_Html = str_replace('xInformacoesUsoGraficax', $_InformacoesUsoGrafica, $_Html);
$_Html = str_replace('xGraficaLinha01x', $_GraficaLinha01, $_Html);
$_Html = str_replace('xGraficaLinha02x', $_GraficaLinha02, $_Html);
$_Html = str_replace('xGraficaLinha03x', $_GraficaLinha03, $_Html);
$_Arquivo_Gerar = 'informe_vencimento_'.$_FaturamentoID;
if (strpos(strtolower(php_uname()), 'windows') === 0) {
// WINDOWS
$_Arquivo_Nome_Html = 'C:\\IMPRESSOS\\'.$_Arquivo_Gerar.'.html';
$_Arquivo_Nome_PDF = 'C:\\IMPRESSOS\\'.$_Arquivo_Gerar.'.pdf';
} else {
// LINUX
$_Arquivo_Nome_Html = $this->Ini->path_doc.'/'.$_Arquivo_Gerar.'.html';
$_Arquivo_Nome_PDF = $this->Ini->path_doc.'/'.$_Arquivo_Gerar.'.pdf';
}
$_Arquivo = fopen($_Arquivo_Nome_Html, "wb");
fwrite($_Arquivo, $_Html);
fclose($_Arquivo);
if (strpos(strtolower(php_uname()), 'windows') === 0) {
$_executar = '"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" -T 10 -R 0 -B 0 -L 0 --orientation Portrait --page-size A4 --disable-smart-shrinking '.$_Arquivo_Nome_Html.' '.$_Arquivo_Nome_PDF;
} else {
$_executar = '/usr/local/bin/wkhtmltopdf -T 10 -R 0 -B 0 -L 4.5 --zoom 0.92 --orientation Portrait --page-size A4 '.
$_Arquivo_Nome_Html.' '.$_Arquivo_Nome_PDF;
}
$_resultado = shell_exec($_executar);
// echo "<pre>$_resultado</pre>";
$_Arquivo_Nome_PDF = $_Arquivo_Gerar.'.pdf';
$_link='https://www.seu_site.com/file/doc/'.$_Arquivo_Nome_PDF;
sc_redir($_link, '', "_self");
Resultado após clicar no Botão Imprimir no formulário, censurei os dados sensíveis do cliente.