quarta-feira, 31 de março de 2021

wkhtmltopdf - Done Exit with code 1 due to network error: ContentNotFoundError


Vou apresentar uma explicação simples para um erro chato no wkhtmltopdf, que realiza a conversão de HTML para PDF em PHP.

É um programa muito bom. 


Alguns dos erros aprensetados podem ser esses: Failed without error message: wkhtmltopdf "h

Esse erro é apresentado pelo próprio Script do wkhtmltopdf

Ao ativar essa Option é apresentado o erro correto do prompt

$pdf = new Pdf(['commandOptions' => ['useExec' => true]]);
$pdf->addPage('teste_pdf.html');

Erro após option: 'wkhtmltopdf' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes.

Faça o teste no seu CMD tentando executar somente o comando "wkhtmltopdf", se apresentar o mesmo erro, adicione o bin dele nas suas Variáveis de Ambiente do SO.

Blz, você já adicionou o comando no Path e ainda está apresentando o erro. Sei isso é muito chato.

Informe a classe Pdf onde está localizado o binário, verifique o exemplo abaixo.

$pdf = new Pdf('teste_pdf.html');

$binary = 'C:/wkhtmltopdf/bin/wkhtmltopdf.exe'; //definindo o caminho do binário

$pdf->binary = $binary; //setando o binário

Ok, agora sua classe está encontrando o binário, mas ainda apresenta o erro "Code 1", apenas continue lendo.

O que eu fiz para consertar é debugar a Classe que gera o PDF, mas especificamente a Classe "Command.php" que fica dentro de "vendor\mikehaertl\php-shellcommand\src" se você estiver usando Composer.

No método "public function execute()" mas especificamente na linha 373 é gerado o comando de execução, eu mandei exibir o comando e executei no CMD, o PDF foi criado certinho que meu olho até brilhou.

O Problema é que esse erro de code 1 é gerado para qualquer URL que não foi carregada corretamente, então se você tiver uma Fonte/Js/Css o qualquer URL de META que não foi carregado é apresentado esse erro, e como o programa "wkhtmltopdf" trata qualquer erro como erro potencial ele não gera o PDF, então alterei a classe "Command.php", na linha de validação adicionei o "code 1" como válido ficando assim 

if ($this->_exitCode !== 0 && $this->_exitCode !== 1) {

Pode ser essa a forma correta de consertar o erro, talvez não, mas eu fiz isso e fiquei feliz e nível de stress baixou. Se você procura a felicidade essa é uma cura.


Usei a classe que está no GIT https://github.com/mikehaertl/phpwkhtmltopdf

No composer você pode usar a chamada: "mikehaertl/phpwkhtmltopdf": "*"


Abraço.

Nenhum comentário:

Postar um comentário