{"id":2116,"date":"2026-07-03T11:23:28","date_gmt":"2026-07-03T14:23:28","guid":{"rendered":"https:\/\/desvendandoocodigo.com.br\/?p=2116"},"modified":"2026-07-03T11:30:28","modified_gmt":"2026-07-03T14:30:28","slug":"como-criar-um-sistema-que-gera-pdf-automaticamente-com-node-js-e-mariadb","status":"publish","type":"post","link":"https:\/\/desvendandoocodigo.com.br\/?p=2116","title":{"rendered":"Como Criar um Sistema que Gera PDF Automaticamente com Node.js e MariaDB"},"content":{"rendered":"\n<p>Quando voc\u00ea solicita um or\u00e7amento em um site e, poucos segundos depois, um PDF \u00e9 gerado automaticamente para download, o que realmente acontece nos bastidores?<\/p>\n\n\n\n<p>Muitas pessoas imaginam que existe alguma ferramenta m\u00e1gica respons\u00e1vel por criar o documento. Na realidade, tudo acontece por meio da integra\u00e7\u00e3o entre uma API, um banco de dados e uma biblioteca capaz de gerar arquivos PDF dinamicamente.<\/p>\n\n\n\n<p>Neste artigo vamos construir exatamente esse fluxo utilizando <strong>Node.js<\/strong>, <strong>Express<\/strong>, <strong>MariaDB<\/strong>, <strong>MySQL2<\/strong> e <strong>PDFKit<\/strong>, entendendo como aplica\u00e7\u00f5es reais armazenam informa\u00e7\u00f5es e geram documentos automaticamente.<\/p>\n\n\n\n<p>Se voc\u00ea deseja criar projetos que realmente agreguem valor ao seu portf\u00f3lio, este \u00e9 um excelente exemplo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">O problema que precisamos resolver<\/h1>\n\n\n\n<p>Imagine uma oficina mec\u00e2nica.<\/p>\n\n\n\n<p>O cliente solicita um or\u00e7amento e informa:<\/p>\n\n\n\n<ul>\n<li>Nome<\/li>\n\n\n\n<li>Ve\u00edculo<\/li>\n\n\n\n<li>Servi\u00e7o<\/li>\n\n\n\n<li>Valor<\/li>\n<\/ul>\n\n\n\n<p>Essas informa\u00e7\u00f5es precisam ser:<\/p>\n\n\n\n<ul>\n<li>validadas;<\/li>\n\n\n\n<li>armazenadas no banco de dados;<\/li>\n\n\n\n<li>utilizadas para criar um or\u00e7amento profissional em PDF;<\/li>\n\n\n\n<li>disponibilizadas imediatamente para download.<\/li>\n<\/ul>\n\n\n\n<p>Esse \u00e9 exatamente o fluxo que construiremos neste projeto.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Como o sistema funciona?<\/h1>\n\n\n\n<p>Nossa aplica\u00e7\u00e3o ser\u00e1 composta por:<\/p>\n\n\n\n<ul>\n<li>Front-End<\/li>\n\n\n\n<li>API REST em Node.js<\/li>\n\n\n\n<li>Express<\/li>\n\n\n\n<li>MariaDB<\/li>\n\n\n\n<li>PDFKit<\/li>\n<\/ul>\n\n\n\n<p>O fluxo de funcionamento ser\u00e1:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Usu\u00e1rio\n\n\u2193\n\nPreenche o formul\u00e1rio\n\n\u2193\n\nAPI Express recebe os dados\n\n\u2193\n\nValida\u00e7\u00e3o\n\n\u2193\n\nMariaDB salva as informa\u00e7\u00f5es\n\n\u2193\n\nPDFKit gera o documento\n\n\u2193\n\nPDF dispon\u00edvel para download\n<\/code><\/pre>\n\n\n\n<p>Perceba que o PDF \u00e9 apenas a etapa final.<\/p>\n\n\n\n<p>Antes dele existe toda uma sequ\u00eancia de processamento respons\u00e1vel por garantir que os dados estejam corretos e armazenados com seguran\u00e7a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Organizando a estrutura do projeto<\/h1>\n\n\n\n<p>Durante o desenvolvimento organizamos a aplica\u00e7\u00e3o separando responsabilidades.<\/p>\n\n\n\n<p>Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>projeto\/\n\n\u251c\u2500\u2500 routes\/\n\u251c\u2500\u2500 controllers\/\n\u251c\u2500\u2500 database\/\n\u251c\u2500\u2500 public\/\n\u251c\u2500\u2500 pdf\/\n\u2514\u2500\u2500 app.js\n<\/code><\/pre>\n\n\n\n<p>Essa organiza\u00e7\u00e3o facilita bastante a manuten\u00e7\u00e3o conforme o projeto cresce.<\/p>\n\n\n\n<p>\u00c9 exatamente esse tipo de estrutura utilizada em aplica\u00e7\u00f5es profissionais.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Configurando o Express<\/h1>\n\n\n\n<p>A API ser\u00e1 respons\u00e1vel por receber as informa\u00e7\u00f5es enviadas pelo formul\u00e1rio.<\/p>\n\n\n\n<p>Ela ir\u00e1:<\/p>\n\n\n\n<ul>\n<li>receber as requisi\u00e7\u00f5es;<\/li>\n\n\n\n<li>validar os dados;<\/li>\n\n\n\n<li>salvar no banco;<\/li>\n\n\n\n<li>gerar o PDF;<\/li>\n\n\n\n<li>responder ao navegador.<\/li>\n<\/ul>\n\n\n\n<p>\u00c9 assim que funcionam milhares de aplica\u00e7\u00f5es desenvolvidas com Node.js.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Conectando ao MariaDB<\/h1>\n\n\n\n<p>Depois criamos a conex\u00e3o utilizando o pacote <strong>MySQL2<\/strong>.<\/p>\n\n\n\n<p>\u00c9 atrav\u00e9s dessa conex\u00e3o que nossa aplica\u00e7\u00e3o consegue executar comandos SQL.<\/p>\n\n\n\n<p>Sempre que um or\u00e7amento \u00e9 enviado, ele \u00e9 gravado no banco de dados antes da gera\u00e7\u00e3o do PDF.<\/p>\n\n\n\n<p>Esse processo \u00e9 chamado de <strong>persist\u00eancia de dados<\/strong>.<\/p>\n\n\n\n<p>Sem ele, todas as informa\u00e7\u00f5es seriam perdidas ao reiniciar o servidor.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Criando a tabela de or\u00e7amentos<\/h1>\n\n\n\n<p>O projeto utiliza uma tabela simples para armazenar cada or\u00e7amento criado.<\/p>\n\n\n\n<p>Assim podemos:<\/p>\n\n\n\n<ul>\n<li>consultar or\u00e7amentos antigos;<\/li>\n\n\n\n<li>manter um hist\u00f3rico;<\/li>\n\n\n\n<li>reutilizar os dados posteriormente;<\/li>\n\n\n\n<li>gerar novos documentos sempre que necess\u00e1rio.<\/li>\n<\/ul>\n\n\n\n<p>Esse \u00e9 um conceito presente em praticamente qualquer sistema comercial.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Validando os dados recebidos<\/h1>\n\n\n\n<p>Antes de salvar qualquer informa\u00e7\u00e3o \u00e9 fundamental validar os dados enviados pelo usu\u00e1rio.<\/p>\n\n\n\n<p>Durante o projeto verificamos se todos os campos obrigat\u00f3rios foram preenchidos corretamente.<\/p>\n\n\n\n<p>Essa etapa evita inconsist\u00eancias no banco de dados e aumenta a seguran\u00e7a da aplica\u00e7\u00e3o.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Organizando as rotas com Express Router<\/h1>\n\n\n\n<p>Ao inv\u00e9s de colocar toda a l\u00f3gica em um \u00fanico arquivo, utilizamos o <strong>Express Router<\/strong>.<\/p>\n\n\n\n<p>Essa abordagem torna o projeto muito mais organizado.<\/p>\n\n\n\n<p>Separar responsabilidades facilita futuras manuten\u00e7\u00f5es e torna o c\u00f3digo mais limpo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Gerando nomes autom\u00e1ticos para os PDFs<\/h1>\n\n\n\n<p>Outro detalhe importante \u00e9 evitar conflitos entre arquivos.<\/p>\n\n\n\n<p>Para isso utilizamos express\u00f5es regulares (Regex) para gerar nomes v\u00e1lidos para cada documento criado.<\/p>\n\n\n\n<p>Esse pequeno detalhe faz bastante diferen\u00e7a em aplica\u00e7\u00f5es reais.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Criando documentos automaticamente com PDFKit<\/h1>\n\n\n\n<p>Depois que os dados foram validados e armazenados no banco, chega a etapa mais interessante.<\/p>\n\n\n\n<p>Utilizamos o <strong>PDFKit<\/strong> para montar o documento dinamicamente.<\/p>\n\n\n\n<p>Cada PDF recebe informa\u00e7\u00f5es como:<\/p>\n\n\n\n<ul>\n<li>Cliente;<\/li>\n\n\n\n<li>Ve\u00edculo;<\/li>\n\n\n\n<li>Servi\u00e7o;<\/li>\n\n\n\n<li>Valor;<\/li>\n\n\n\n<li>Data do or\u00e7amento.<\/li>\n<\/ul>\n\n\n\n<p>Nenhum documento fica salvo previamente.<\/p>\n\n\n\n<p>Cada PDF \u00e9 criado automaticamente a partir das informa\u00e7\u00f5es enviadas pelo usu\u00e1rio.<\/p>\n\n\n\n<p>\u00c9 exatamente esse comportamento encontrado em sistemas de emiss\u00e3o de or\u00e7amentos, pedidos, recibos e relat\u00f3rios.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Testando a API<\/h1>\n\n\n\n<p>Ap\u00f3s implementar a rota realizamos testes utilizando um cliente REST.<\/p>\n\n\n\n<p>Esses testes permitem verificar:<\/p>\n\n\n\n<ul>\n<li>envio das requisi\u00e7\u00f5es;<\/li>\n\n\n\n<li>valida\u00e7\u00e3o dos dados;<\/li>\n\n\n\n<li>inser\u00e7\u00e3o no banco;<\/li>\n\n\n\n<li>gera\u00e7\u00e3o correta do PDF.<\/li>\n<\/ul>\n\n\n\n<p>Testar a API antes da integra\u00e7\u00e3o com o Front-End facilita muito a identifica\u00e7\u00e3o de problemas.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Integrando Front-End e Back-End<\/h1>\n\n\n\n<p>Na etapa final conectamos o formul\u00e1rio HTML \u00e0 API criada em Node.js.<\/p>\n\n\n\n<p>Quando o usu\u00e1rio envia os dados acontece toda a sequ\u00eancia:<\/p>\n\n\n\n<ol>\n<li>O navegador envia as informa\u00e7\u00f5es.<\/li>\n\n\n\n<li>O Express recebe a requisi\u00e7\u00e3o.<\/li>\n\n\n\n<li>Os dados s\u00e3o validados.<\/li>\n\n\n\n<li>O MariaDB salva as informa\u00e7\u00f5es.<\/li>\n\n\n\n<li>O PDFKit gera o documento.<\/li>\n\n\n\n<li>O PDF fica dispon\u00edvel para download.<\/li>\n<\/ol>\n\n\n\n<p>Perceba que diversas tecnologias trabalham juntas para entregar uma funcionalidade aparentemente simples.<\/p>\n\n\n\n<p>Essa vis\u00e3o completa do processo \u00e9 muito mais importante do que decorar comandos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Tecnologias utilizadas<\/h1>\n\n\n\n<p>Neste projeto trabalhamos com:<\/p>\n\n\n\n<ul>\n<li>Node.js<\/li>\n\n\n\n<li>Express<\/li>\n\n\n\n<li>Express Router<\/li>\n\n\n\n<li>MariaDB<\/li>\n\n\n\n<li>MySQL2<\/li>\n\n\n\n<li>PDFKit<\/li>\n\n\n\n<li>API REST<\/li>\n\n\n\n<li>Banco de Dados<\/li>\n\n\n\n<li>Regex<\/li>\n\n\n\n<li>JavaScript<\/li>\n\n\n\n<li>Persist\u00eancia de Dados<\/li>\n<\/ul>\n\n\n\n<p>Al\u00e9m da programa\u00e7\u00e3o em si, voc\u00ea aprender\u00e1 como organizar aplica\u00e7\u00f5es utilizando boas pr\u00e1ticas de desenvolvimento.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">O que voc\u00ea aprender\u00e1<\/h1>\n\n\n\n<p>Ao concluir este projeto voc\u00ea ser\u00e1 capaz de:<\/p>\n\n\n\n<ul>\n<li>criar APIs utilizando Express;<\/li>\n\n\n\n<li>conectar aplica\u00e7\u00f5es Node.js ao MariaDB;<\/li>\n\n\n\n<li>utilizar MySQL2;<\/li>\n\n\n\n<li>validar dados recebidos pelo servidor;<\/li>\n\n\n\n<li>organizar rotas utilizando Express Router;<\/li>\n\n\n\n<li>gerar documentos PDF automaticamente;<\/li>\n\n\n\n<li>integrar Front-End e Back-End;<\/li>\n\n\n\n<li>desenvolver um projeto completo para o portf\u00f3lio.<\/li>\n<\/ul>\n\n\n\n<p>Mais importante do que decorar bibliotecas, voc\u00ea entender\u00e1 como todas essas tecnologias trabalham juntas para resolver problemas reais.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Assista ao projeto completo<\/h1>\n\n\n\n<p>Se voc\u00ea prefere aprender acompanhando toda a implementa\u00e7\u00e3o, gravei este projeto mostrando cada etapa do desenvolvimento, desde a cria\u00e7\u00e3o da API at\u00e9 a gera\u00e7\u00e3o autom\u00e1tica dos documentos PDF.<\/p>\n\n\n\n<p>No projeto voc\u00ea ver\u00e1 na pr\u00e1tica como:<\/p>\n\n\n\n<ul>\n<li>criar uma API com Node.js e Express;<\/li>\n\n\n\n<li>conectar a aplica\u00e7\u00e3o ao MariaDB utilizando MySQL2;<\/li>\n\n\n\n<li>validar os dados enviados pelo usu\u00e1rio;<\/li>\n\n\n\n<li>armazenar informa\u00e7\u00f5es no banco de dados;<\/li>\n\n\n\n<li>gerar PDFs automaticamente com PDFKit;<\/li>\n\n\n\n<li>integrar o Front-End com o Back-End.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfa5 Projeto completo (v\u00eddeo editado)<\/h2>\n\n\n\n<p><strong>Como Criar um Sistema que Gera PDF Automaticamente | Node.js + MariaDB<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Como Criar um Sistema que Gera PDF Automaticamente | Node.js + MariaDB\" width=\"960\" height=\"540\" src=\"https:\/\/www.youtube.com\/embed\/XW1Kzha3mzc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Este \u00e9 o conte\u00fado recomendado para quem deseja aprender de forma objetiva, focando apenas nas etapas importantes do desenvolvimento.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcfa Quer acompanhar toda a constru\u00e7\u00e3o do projeto?<\/h2>\n\n\n\n<p>Se voc\u00ea gosta de assistir ao desenvolvimento completo, incluindo explica\u00e7\u00f5es extras, d\u00favidas respondidas durante a transmiss\u00e3o e todo o processo realizado ao vivo, confira tamb\u00e9m a live original.<\/p>\n\n\n\n<p><strong>Live Completa<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"MINI PROJETO Node.js + MariaDB: API &amp; Gerador de Or\u00e7amento em PDF Autom\u00e1tico e Responsivo\" width=\"960\" height=\"540\" src=\"https:\/\/www.youtube.com\/embed\/Y-3uJC_oXLw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Conclus\u00e3o<\/h1>\n\n\n\n<p>Quando um sistema gera um or\u00e7amento automaticamente, ele n\u00e3o est\u00e1 apenas criando um arquivo PDF.<\/p>\n\n\n\n<p>Existe todo um processo acontecendo nos bastidores:<\/p>\n\n\n\n<ul>\n<li>recebimento dos dados;<\/li>\n\n\n\n<li>valida\u00e7\u00e3o das informa\u00e7\u00f5es;<\/li>\n\n\n\n<li>comunica\u00e7\u00e3o com o banco de dados;<\/li>\n\n\n\n<li>persist\u00eancia dos registros;<\/li>\n\n\n\n<li>gera\u00e7\u00e3o din\u00e2mica do documento PDF;<\/li>\n\n\n\n<li>entrega do arquivo ao usu\u00e1rio.<\/li>\n<\/ul>\n\n\n\n<p>Compreender esse fluxo \u00e9 muito mais valioso do que simplesmente aprender a utilizar uma biblioteca.<\/p>\n\n\n\n<p>Essa \u00e9 justamente a proposta do <strong>Desvendando o C\u00f3digo<\/strong>: revelar como as aplica\u00e7\u00f5es realmente funcionam, conectando diferentes tecnologias para resolver problemas do mundo real.<\/p>\n\n\n\n<p>Ao entender esse processo, voc\u00ea deixa de apenas copiar c\u00f3digo e passa a desenvolver sistemas com muito mais confian\u00e7a e autonomia.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando voc\u00ea solicita um or\u00e7amento em um site e, poucos segundos depois, um PDF \u00e9 gerado automaticamente para download, o que realmente acontece nos bastidores? Muitas pessoas imaginam que existe alguma ferramenta m\u00e1gica respons\u00e1vel por criar o documento. Na realidade, tudo acontece por meio da integra\u00e7\u00e3o entre uma API, um banco de dados e uma biblioteca capaz de gerar arquivos PDF dinamicamente. Neste artigo vamos construir exatamente esse fluxo utilizando Node.js, Express, MariaDB, MySQL2 e PDFKit, entendendo como aplica\u00e7\u00f5es reais armazenam informa\u00e7\u00f5es e geram documentos automaticamente. Se voc\u00ea deseja criar projetos que realmente agreguem valor ao seu portf\u00f3lio, este \u00e9 um excelente exemplo. O problema que precisamos resolver Imagine uma oficina mec\u00e2nica. O cliente solicita um or\u00e7amento e informa: Essas informa\u00e7\u00f5es precisam ser: Esse \u00e9 exatamente o fluxo que construiremos neste projeto. Como o sistema funciona? Nossa aplica\u00e7\u00e3o ser\u00e1 composta por: O fluxo de funcionamento ser\u00e1: Perceba que o PDF \u00e9 apenas a etapa final. Antes dele existe toda uma sequ\u00eancia de processamento respons\u00e1vel por garantir que os dados estejam corretos e armazenados com seguran\u00e7a. Organizando a estrutura do projeto Durante o desenvolvimento organizamos a aplica\u00e7\u00e3o separando responsabilidades. Exemplo: Essa organiza\u00e7\u00e3o facilita bastante a manuten\u00e7\u00e3o conforme o projeto cresce. \u00c9 exatamente esse tipo de estrutura utilizada em aplica\u00e7\u00f5es profissionais. Configurando o Express A API ser\u00e1 respons\u00e1vel por receber as informa\u00e7\u00f5es enviadas pelo formul\u00e1rio. Ela ir\u00e1: \u00c9 assim que funcionam milhares de aplica\u00e7\u00f5es desenvolvidas com Node.js. Conectando ao MariaDB Depois criamos a conex\u00e3o utilizando o pacote MySQL2. \u00c9 atrav\u00e9s dessa conex\u00e3o que nossa aplica\u00e7\u00e3o consegue executar comandos SQL. Sempre que um or\u00e7amento \u00e9 enviado, ele \u00e9 gravado no banco de dados antes da gera\u00e7\u00e3o do PDF. Esse processo \u00e9 chamado de persist\u00eancia de dados. Sem ele, todas as informa\u00e7\u00f5es seriam perdidas ao reiniciar o servidor. Criando a tabela de or\u00e7amentos O projeto utiliza uma tabela simples para armazenar cada or\u00e7amento criado. Assim podemos: Esse \u00e9 um conceito presente em praticamente qualquer sistema comercial. Validando os dados recebidos Antes de salvar qualquer informa\u00e7\u00e3o \u00e9 fundamental validar os dados enviados pelo usu\u00e1rio. Durante o projeto verificamos se todos os campos obrigat\u00f3rios foram preenchidos corretamente. Essa etapa evita inconsist\u00eancias no banco de dados e aumenta a seguran\u00e7a da aplica\u00e7\u00e3o. Organizando as rotas com Express Router Ao inv\u00e9s de colocar toda a l\u00f3gica em um \u00fanico arquivo, utilizamos o Express Router. Essa abordagem torna o projeto muito mais organizado. Separar responsabilidades facilita futuras manuten\u00e7\u00f5es e torna o c\u00f3digo mais limpo. Gerando nomes autom\u00e1ticos para os PDFs Outro detalhe importante \u00e9 evitar conflitos entre arquivos. Para isso utilizamos express\u00f5es regulares (Regex) para gerar nomes v\u00e1lidos para cada documento criado. Esse pequeno detalhe faz bastante diferen\u00e7a em aplica\u00e7\u00f5es reais. Criando documentos automaticamente com PDFKit Depois que os dados foram validados e armazenados no banco, chega a etapa mais interessante. Utilizamos o PDFKit para montar o documento dinamicamente. Cada PDF recebe informa\u00e7\u00f5es como: Nenhum documento fica salvo previamente. Cada PDF \u00e9 criado automaticamente a partir das informa\u00e7\u00f5es enviadas pelo usu\u00e1rio. \u00c9 exatamente esse comportamento encontrado em sistemas de emiss\u00e3o de or\u00e7amentos, pedidos, recibos e relat\u00f3rios. Testando a API Ap\u00f3s implementar a rota realizamos testes utilizando um cliente REST. Esses testes permitem verificar: Testar a API antes da integra\u00e7\u00e3o com o Front-End facilita muito a identifica\u00e7\u00e3o de problemas. Integrando Front-End e Back-End Na etapa final conectamos o formul\u00e1rio HTML \u00e0 API criada em Node.js. Quando o usu\u00e1rio envia os dados acontece toda a sequ\u00eancia: Perceba que diversas tecnologias trabalham juntas para entregar uma funcionalidade aparentemente simples. Essa vis\u00e3o completa do processo \u00e9 muito mais importante do que decorar comandos. Tecnologias utilizadas Neste projeto trabalhamos com: Al\u00e9m da programa\u00e7\u00e3o em si, voc\u00ea aprender\u00e1 como organizar aplica\u00e7\u00f5es utilizando boas pr\u00e1ticas de desenvolvimento. O que voc\u00ea aprender\u00e1 Ao concluir este projeto voc\u00ea ser\u00e1 capaz de: Mais importante do que decorar bibliotecas, voc\u00ea entender\u00e1 como todas essas tecnologias trabalham juntas para resolver problemas reais. Assista ao projeto completo Se voc\u00ea prefere aprender acompanhando toda a implementa\u00e7\u00e3o, gravei este projeto mostrando cada etapa do desenvolvimento, desde a cria\u00e7\u00e3o da API at\u00e9 a gera\u00e7\u00e3o autom\u00e1tica dos documentos PDF. No projeto voc\u00ea ver\u00e1 na pr\u00e1tica como: \ud83c\udfa5 Projeto completo (v\u00eddeo editado) Como Criar um Sistema que Gera PDF Automaticamente | Node.js + MariaDB Este \u00e9 o conte\u00fado recomendado para quem deseja aprender de forma objetiva, focando apenas nas etapas importantes do desenvolvimento. \ud83d\udcfa Quer acompanhar toda a constru\u00e7\u00e3o do projeto? Se voc\u00ea gosta de assistir ao desenvolvimento completo, incluindo explica\u00e7\u00f5es extras, d\u00favidas respondidas durante a transmiss\u00e3o e todo o processo realizado ao vivo, confira tamb\u00e9m a live original. Live Completa Conclus\u00e3o Quando um sistema gera um or\u00e7amento automaticamente, ele n\u00e3o est\u00e1 apenas criando um arquivo PDF. Existe todo um processo acontecendo nos bastidores: Compreender esse fluxo \u00e9 muito mais valioso do que simplesmente aprender a utilizar uma biblioteca. Essa \u00e9 justamente a proposta do Desvendando o C\u00f3digo: revelar como as aplica\u00e7\u00f5es realmente funcionam, conectando diferentes tecnologias para resolver problemas do mundo real. Ao entender esse processo, voc\u00ea deixa de apenas copiar c\u00f3digo e passa a desenvolver sistemas com muito mais confian\u00e7a e autonomia.<\/p>\n","protected":false},"author":1,"featured_media":2117,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[21],"tags":[],"_links":{"self":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2116"}],"collection":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2116"}],"version-history":[{"count":3,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2116\/revisions"}],"predecessor-version":[{"id":2121,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2116\/revisions\/2121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/media\/2117"}],"wp:attachment":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}