{"id":4416,"date":"2026-08-12T11:20:53","date_gmt":"2026-08-12T14:20:53","guid":{"rendered":"https:\/\/www.l2maker.com.br\/documentacao\/?p=4416"},"modified":"2026-08-12T11:44:27","modified_gmt":"2026-08-12T14:44:27","slug":"gerando-o-pdf-danfs-e-via-linha-de-comando-integracao-com-outras-linguagens","status":"publish","type":"post","link":"https:\/\/www.l2maker.com.br\/documentacao\/2026\/08\/gerando-o-pdf-danfs-e-via-linha-de-comando-integracao-com-outras-linguagens\/","title":{"rendered":"Gerando o PDF (DANFS-e) via linha de comando (Integra\u00e7\u00e3o com outras linguagens)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel solicitar a gera\u00e7\u00e3o do PDF via linha de comando, permitindo a gera\u00e7\u00e3o do PDF em outras linguagens como PHP, Python, Node.JS&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9-requisitos<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Servidor Windows ou Linux;<\/li>\n\n\n\n<li>Java vers\u00e3o 1.8 a 21;<\/li>\n\n\n\n<li>Espa\u00e7o em disco: 50 MB;<\/li>\n\n\n\n<li>Licen\u00e7a de uso (para produ\u00e7\u00e3o apenas).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Preparando o ambiente<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Crie um novo diret\u00f3rio (EX: &#8220;C:\\nfse-tools\\&#8221; ou &#8220;\/opt\/nfse-tools\/&#8221;), chamada daqui pra frente de &#8216;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">nfse-tools<\/mark><\/strong>&#8216;;<\/li>\n\n\n\n<li>Extraia o conte\u00fado do ZIP da NFS-e Nacional, e copie todos os arquivos da pastas \\WEB-INF\\lib para a pasta &#8216;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">nfse-tools<\/mark><\/strong>&#8216;;<\/li>\n\n\n\n<li>Extraia o conte\u00fado da API core (l2s-core.jar) e copie todos os arquivos da pastas \\WEB-INF\\lib para a pasta &#8216;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">nfse-tools<\/mark><\/strong>&#8216;;<\/li>\n\n\n\n<li>Copie o arquivo de licen\u00e7a (se j\u00e1 tiver) para a pasta &#8216;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">nfse-tools<\/mark><\/strong>&#8216;;<\/li>\n\n\n\n<li>Crie um BAT (Windows) ou SH (Linux) na pasta &#8216;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">nfse-tools<\/mark><\/strong>&#8216; com o conte\u00fado apresentado no final deste texto;<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Testando a gera\u00e7\u00e3o via linha de comando<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Salve o XML da NFS-e em disco;<\/li>\n\n\n\n<li>Defina o nome do PDF tempor\u00e1rio a ser gerado;<\/li>\n\n\n\n<li>E execute a linha de comando para .SH (Windows) ou .BAT (Linux):\n<ul class=\"wp-block-list\">\n<li>Linux:<br>\/opt\/nfse-tools\/danfse.sh &#8216;\/tmp\/nota1.xml&#8217; &#8216;\/tmp\/nota1.pdf&#8217;<br><\/li>\n\n\n\n<li>Windows:<br>c:\\nfse-tools\\danfse.bat &#8220;C:\\temp\\nota1.xml&#8221; &#8220;C:\\temp\\nota1.pdf&#8221;<br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Observe se o arquivo PDF foi gerado, e o utilize em caso de sucesso.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">danfse.sh (Linux)<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">!\/bin\/bash<br>cd \"$(dirname \"$0\")\"<br>java -Dorg.jcp.xml.dsig.secureValidation=false -cp commons-logging-1.1.1.jar:commons-digester-2.1.jar:commons-collections-3.2.2.jar:commons-beanutils-1.7.0.jar:itext-4.2.1.jar:barcode4j.jar:xmldsig.jar:zxing-core-1.7.jar:zxing-core-3.5.3.jar:bcprov-jdk15on-155.jar:xmlsec-1.5.2.jar:l2s-core.jar:l2s-icp.jar:l2s-nfse-nacional.jar:jasperreports-5.0.0.jar:. br.com.l2software.api.nfsenacional.Main DANFSE $1 $2<\/mark><\/strong><br><br><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">danfse.bat (Windows)<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">@echo off<br>cd \/d \"%~dp0\"<br>java -Dorg.jcp.xml.dsig.secureValidation=false -cp commons-logging-1.1.1.jar;commons-digester-2.1.jar;commons-collections-3.2.2.jar;commons-beanutils-1.7.0.jar;itext-4.2.1.jar;barcode4j.jar;xmldsig.jar;zxing-core-1.7.jar;zxing-core-3.5.3.jar;bcprov-jdk15on-155.jar;xmlsec-1.5.2.jar;l2s-core.jar;l2s-icp.jar;l2s-nfse-nacional.jar;jasperreports-5.0.0.jar;. br.com.l2software.api.nfsenacional.Main DANFSE %1 %2<\/mark><\/strong><br><br><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digo para outras linguagens<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ap\u00f3s criar o ambiente, basta executar o c\u00f3digo na sua linguagem de programa\u00e7\u00e3o (DICA: Utiliza alguma IA para traduzir para sua linguagem de programa\u00e7\u00e3o).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3digo PHP<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$script = '\/opt\/nfse-tools\/danfse.sh';<br>$pdfOutput = tempnam(sys_get_temp_dir(), 'nfse') . '.pdf';<br>$xmlOutput = tempnam(sys_get_temp_dir(), 'nfse') . '.xml';<br>file_put_contents($xmlOutput, $nfseXml);<br>$command = \"$script \" . escapeshellarg($xmlOutput) . ' ' . escapeshellarg($pdfOutput);<br><br>\/\/ Execute command<br>$output = shell_exec($command);<br>if(!file_exists($pdfOutput)) {<br>   die(\"Falha ao tentar gerar o PDF da NFS-e: '{$nfseXml}'.\");<br>}<br>print \"PDF gerado: $pdfOutput \";<\/mark><\/strong><br><br><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3digo Node.JS<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">const script = '\/opt\/nfse-tools\/danfse.sh';<br>const xmlOutput = createTempFileWithExtension('.xml');<br>const pdfOutput = createTempFileWithExtension('.pdf');<br>        <br>\/\/ Escreve o XML no arquivo tempor\u00e1rio<br>await fs.writeFile(xmlOutput, nfseXml, 'utf8');<br>        <br>\/\/ Escapa os argumentos para shell<br>const escapedXmlOutput = `\"${xmlOutput}\"`;<br>const escapedPdfOutput = `\"${pdfOutput}\"`;<br>const command = `${script} ${escapedXmlOutput} ${escapedPdfOutput}`;<br>       <br>\/\/ Executa o comando<br>const { stdout, stderr } = await execPromise(command);<br>        <br>if (stderr) {<br>     console.error(`Erro: ${stderr}`);<br>}<br>        <br>\/\/ Verifica se o PDF foi gerado<br>try {<br>            await fs.access(pdfOutput);<br>            console.log(`PDF gerado: ${pdfOutput}`);<br>            return pdfOutput;<br>} catch (err) {<br>            throw new Error(`Falha ao tentar gerar o PDF da NFS-e: '${nfseXml}'.`);<br>}<\/mark><\/strong><br><br><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Dicas e solu\u00e7\u00e3o de problemas<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Permiss\u00f5es: Confira se o usu\u00e1rio que executa o c\u00f3digo (PHP\/Node\/Python&#8230;) tem PERMISS\u00c3O de leitura do XML, e leitura\/escrita da pasta onde ser\u00e1 gerado o PDF.<\/li>\n\n\n\n<li>Instala\u00e7\u00e3o do Java: Confirme se o Java est\u00e1 instalado no servidor;<\/li>\n\n\n\n<li>Vers\u00e3o do Java: Confirme se o Java padr\u00e3o do usu\u00e1rio est\u00e1 definido para um vers\u00e3o compat\u00edvel. Se necess\u00e1rio utilize o caminho absoluto do Java.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u00c9 poss\u00edvel solicitar a gera\u00e7\u00e3o do PDF via linha de comando, permitindo a gera\u00e7\u00e3o do PDF em outras linguagens como PHP, Python, Node.JS&#8230; Pr\u00e9-requisitos Preparando o ambiente Testando a gera\u00e7\u00e3o via linha de comando danfse.sh (Linux) !\/bin\/bashcd &#8220;$(dirname &#8220;$0&#8221;)&#8221;java -Dorg.jcp.xml.dsig.secureValidation=false -cp commons-logging-1.1.1.jar:commons-digester-2.1.jar:commons-collections-3.2.2.jar:commons-beanutils-1.7.0.jar:itext-4.2.1.jar:barcode4j.jar:xmldsig.jar:zxing-core-1.7.jar:zxing-core-3.5.3.jar:bcprov-jdk15on-155.jar:xmlsec-1.5.2.jar:l2s-core.jar:l2s-icp.jar:l2s-nfse-nacional.jar:jasperreports-5.0.0.jar:. br.com.l2software.api.nfsenacional.Main DANFSE $1 $2 danfse.bat (Windows) @echo offcd \/d &#8220;%~dp0&#8243;java -Dorg.jcp.xml.dsig.secureValidation=false -cp commons-logging-1.1.1.jar;commons-digester-2.1.jar;commons-collections-3.2.2.jar;commons-beanutils-1.7.0.jar;itext-4.2.1.jar;barcode4j.jar;xmldsig.jar;zxing-core-1.7.jar;zxing-core-3.5.3.jar;bcprov-jdk15on-155.jar;xmlsec-1.5.2.jar;l2s-core.jar;l2s-icp.jar;l2s-nfse-nacional.jar;jasperreports-5.0.0.jar;. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,437],"tags":[],"class_list":["post-4416","post","type-post","status-publish","format-standard","hentry","category-sem-categoria","category-api-nfse-nacional-instrucoes"],"_links":{"self":[{"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/posts\/4416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/comments?post=4416"}],"version-history":[{"count":12,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/posts\/4416\/revisions"}],"predecessor-version":[{"id":4434,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/posts\/4416\/revisions\/4434"}],"wp:attachment":[{"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/media?parent=4416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/categories?post=4416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.l2maker.com.br\/documentacao\/wp-json\/wp\/v2\/tags?post=4416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}