Como criar arquivos PDF em JavaScript
No âmbito do compartilhamento de documentos, o formato PDF (Portable Document Format), pioneiro da Adobe, desempenha um papel crucial na preservação da integridade de conteúdo rico em texto e visualmente atraente. Acessar um arquivo PDF online geralmente requer um programa específico. No cenário digital atual, os arquivos PDF tornaram-se indispensáveis para diversas publicações importantes. Muitas empresas dependem de arquivos PDF para criar documentos profissionais e faturas. Além disso, os desenvolvedores frequentemente utilizam bibliotecas de criação de PDFs para atender a requisitos específicos dos clientes. O processo de geração de PDFs foi simplificado com o surgimento das bibliotecas modernas. Ao selecionar a biblioteca mais adequada para um projeto que envolva a geração de PDFs, é essencial considerar fatores como recursos de criação, leitura e conversão, garantindo uma integração perfeita e um desempenho ideal.
Bibliotecas JavaScript
Considere, por exemplo, o cenário em que desejamos que o cliente possa baixar e imprimir uma cópia da nossa fatura em PDF sem esforço. Além disso, é crucial para nós manter o layout preciso da fatura e garantir uma qualidade de impressão impecável.
Nesta seção, vamos explorar uma série de bibliotecas JavaScript altamente conceituadas que se destacam na conversão e criação de documentos HTML para PDF, fornecendo ferramentas versáteis para a geração e conversão de documentos de forma eficiente e precisa.
1. PDFKit
O PDFKit foi uma biblioteca de PDF que esteve entre as primeiras a ser lançada no vasto ecossistema de bibliotecas JavaScript . Sua popularidade cresceu significativamente desde o lançamento inicial em 2012 e, em 2021, ainda recebia atualizações regulares.
Utilizando o Webpack, o PDFKit oferece suporte tanto para bibliotecas Node quanto para navegadores web, sendo possível o uso de fontes personalizadas e a incorporação de imagens.
No entanto, como veremos na comparação, algumas bibliotecas PDF são, na prática, apenas wrappers do PDFKit e talvez um pouco mais fáceis de usar do que o próprio PDFKit.
Não existe uma API de alto nível disponível para o PDFKit. A documentação também costuma ser difícil. Como seria de esperar, leva algum tempo para se acostumar, e você pode descobrir que gerar PDFs usando JavaScript nem sempre é a tarefa mais fácil.
// Requiring the necessary modules for file system and PDF document creation.
const fs = require('fs');
const PDFDocument = require('pdfkit');
// Create a new PDF document instance
const doc = new PDFDocument();
// Add text content to the PDF document
doc.text('Hello world!');
// Define the output file location and start writing the PDF content to it
doc.pipe(fs.createWriteStream('Demo.pdf'));
// Finalize the PDF file
doc.end();
// Requiring the necessary modules for file system and PDF document creation.
const fs = require('fs');
const PDFDocument = require('pdfkit');
// Create a new PDF document instance
const doc = new PDFDocument();
// Add text content to the PDF document
doc.text('Hello world!');
// Define the output file location and start writing the PDF content to it
doc.pipe(fs.createWriteStream('Demo.pdf'));
// Finalize the PDF file
doc.end();
2. pdfmake
Ao contrário do PDFKit, que usa o método imperativo convencional para gerar algo, o pdfmake usa uma abordagem declarativa. Consequentemente, o uso da biblioteca pdfmake torna mais simples concentrar-se na funcionalidade pretendida da produção de PDF, em vez de perder tempo ensinando a biblioteca a alcançar um determinado resultado.
É crucial ter em mente que, embora certas soluções possam parecer promissoras, elas podem não ser perfeitas. Um exemplo disso é a integração de fontes personalizadas com o pdfmake ao utilizar o Webpack, o que pode potencialmente causar problemas. Infelizmente, existe pouca documentação online disponível sobre esse problema específico. No entanto, se você não estiver utilizando o Webpack, pode facilmente clonar o repositório Git e executar o script de incorporação de fontes para superar quaisquer obstáculos potenciais associados à integração de fontes personalizadas.
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.56/pdfmake.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.56/vfs_fonts.js"></script>
</head>
<body>
<script type="text/javascript">
// Function to create and print a PDF document
function CreatePdf() {
// Define document content and styles
var docDefinition = {
content: [
{ text: "Hello world" } // Text content to be included in the PDF
],
defaultStyle: {}
};
// Create and print the PDF using pdfMake library
pdfMake.createPdf(docDefinition).print();
}
</script>
<button onclick="CreatePdf()">Print pdf</button>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.56/pdfmake.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.56/vfs_fonts.js"></script>
</head>
<body>
<script type="text/javascript">
// Function to create and print a PDF document
function CreatePdf() {
// Define document content and styles
var docDefinition = {
content: [
{ text: "Hello world" } // Text content to be included in the PDF
],
defaultStyle: {}
};
// Create and print the PDF using pdfMake library
pdfMake.createPdf(docDefinition).print();
}
</script>
<button onclick="CreatePdf()">Print pdf</button>
</body>
</html>

3. IronPDF
O IronPDF foi criado para facilitar a criação, a navegação e a edição de documentos PDF por parte dos desenvolvedores. Ele funciona como um poderoso conversor de PDF e oferece uma API básica para criar, editar e processar arquivos PDF.
IronPDF for Node.js simplifica o processo de criação e personalização programática de documentos PDF. Desenvolvido pela Iron Software, um fornecedor confiável de bibliotecas de processamento de documentos de alto desempenho, o IronPDF oferece uma solução robusta para geração de PDFs em ambientes Node.js Ele se integra perfeitamente a projetos Node.js , fornecendo aos desenvolvedores ferramentas poderosas para gerar, formatar e editar PDFs com facilidade.
A biblioteca IronPDF possui uma ampla gama de recursos, incluindo a capacidade de dividir e combinar páginas em documentos PDF novos ou existentes, ler e editar arquivos PDF existentes, extrair imagens de arquivos PDF, adicionar texto, gráficos, marcadores, marcas d'água, cabeçalhos e rodapés a arquivos PDF, tudo sem a necessidade do Acrobat Reader. A partir de arquivos CSS e de mídia CSS, é possível gerar documentos PDF. O IronPDF permite que os usuários criem, carreguem e atualizem formulários PDF, tanto novos quanto já existentes.
Principais funcionalidades do IronPDF for Node.js: Geração versátil de PDFs: Com o IronPDF, os desenvolvedores podem gerar PDFs a partir de diversas fontes, incluindo HTML, CSS, JavaScript, imagens e outros tipos de arquivo. Essa flexibilidade permite a criação de documentos PDF dinâmicos e visualmente atraentes, adaptados a requisitos específicos.
- Personalização avançada de documentos: o IronPDF permite que os desenvolvedores aprimorem documentos PDF com recursos como cabeçalhos, rodapés, anexos, assinaturas digitais, marcas d'água e marcadores. Isso permite a criação de PDFs de nível profissional com conteúdo rico e elementos interativos.
- Recursos de segurança: O IronPDF oferece recursos de segurança robustos para proteger PDFs contra acesso não autorizado. Os desenvolvedores podem implementar medidas de segurança como senhas, assinaturas digitais, metadados e outras configurações de segurança para proteger informações confidenciais contidas em documentos PDF.
- Desempenho otimizado: O IronPDF foi projetado para oferecer desempenho ideal, apresentando suporte completo a multithreading e operações assíncronas. Isso garante a geração eficiente de PDFs, tornando-os adequados para aplicações de missão crítica onde o desempenho é fundamental.
- Conjunto abrangente de recursos: Com mais de 50 recursos para criar, formatar e editar documentos PDF, o IronPDF oferece uma solução completa para todas as tarefas relacionadas a PDFs. Desde a geração básica de documentos até a personalização e segurança avançadas, o IronPDF oferece uma ampla gama de recursos para atender às necessidades dos desenvolvedores.
O código abaixo demonstra como usar JavaScript para renderizar HTML em um arquivo PDF com qualidade de imagem perfeita:
import { PdfDocument } from "@ironsoftware/ironpdf";
(async () => {
// HTML content containing JavaScript to be executed upon rendering
const htmlWithJavaScript = `<h1>This is HTML</h1>
<script>
document.write('<h1>This is JavaScript</h1>');
window.ironpdf.notifyRender(); // Notify IronPDF when rendering is done
</script>`;
// Rendering options to enable JavaScript
const renderOptions = {
enableJavaScript: true,
};
// Render HTML content to a PDF
const pdf = await PdfDocument.fromHtml(htmlWithJavaScript, { renderOptions });
// Save the PDF to a file
await pdf.saveAs("javascript-in-html.pdf");
})();
import { PdfDocument } from "@ironsoftware/ironpdf";
(async () => {
// HTML content containing JavaScript to be executed upon rendering
const htmlWithJavaScript = `<h1>This is HTML</h1>
<script>
document.write('<h1>This is JavaScript</h1>');
window.ironpdf.notifyRender(); // Notify IronPDF when rendering is done
</script>`;
// Rendering options to enable JavaScript
const renderOptions = {
enableJavaScript: true,
};
// Render HTML content to a PDF
const pdf = await PdfDocument.fromHtml(htmlWithJavaScript, { renderOptions });
// Save the PDF to a file
await pdf.saveAs("javascript-in-html.pdf");
})();
Você também pode executar JavaScript personalizado que modifica facilmente a aparência do conteúdo HTML:
import { PdfDocument } from "@ironsoftware/ironpdf";
(async () => {
// JavaScript code to change the text color of header tags to red
const javascriptCode = "document.querySelectorAll('h1').forEach(function(el){ el.style.color = 'red'; })";
// HTML content which will be affected by the custom JavaScript
const htmlContent = "<h1>Happy New Year!</h1>";
// Rendering options to enable and apply the custom JavaScript
const renderOptions = {
enableJavaScript: true,
javascript: javascriptCode,
};
// Render HTML content to a PDF
const pdf = await PdfDocument.fromHtml(htmlContent, { renderOptions });
// Save the PDF with the applied JavaScript effects
await pdf.saveAs("executed_js.pdf");
})();
import { PdfDocument } from "@ironsoftware/ironpdf";
(async () => {
// JavaScript code to change the text color of header tags to red
const javascriptCode = "document.querySelectorAll('h1').forEach(function(el){ el.style.color = 'red'; })";
// HTML content which will be affected by the custom JavaScript
const htmlContent = "<h1>Happy New Year!</h1>";
// Rendering options to enable and apply the custom JavaScript
const renderOptions = {
enableJavaScript: true,
javascript: javascriptCode,
};
// Render HTML content to a PDF
const pdf = await PdfDocument.fromHtml(htmlContent, { renderOptions });
// Save the PDF with the applied JavaScript effects
await pdf.saveAs("executed_js.pdf");
})();

Ao clicar no botão de download, o arquivo PDF será baixado, conforme mostrado na página do PDF na imagem acima. O arquivo PDF gerado será semelhante ao mostrado abaixo.

Conclusão
É importante mencionar que, quando utilizado por terceiros, o código JavaScript mostrado acima apresenta potencial para uso indevido e problemas de segurança. É crucial considerar os riscos, como acesso não autorizado e vulnerabilidades de segurança de dados, ao inserir esse tipo de código em uma página ou site da web. Além disso, é importante levar em conta a necessidade de oferecer suporte a navegadores desatualizados que podem não ter todos os recursos necessários, bem como problemas de compatibilidade com diversos sistemas e navegadores.
O IronPDF está disponível não apenas for Node.js , mas também para outras plataformas populares, incluindo .NET , Java e Python . Essa disponibilidade multiplataforma garante consistência e flexibilidade para desenvolvedores que trabalham com diferentes conjuntos de tecnologias. Com seu conjunto robusto de recursos, integração perfeita e desempenho impecável, o IronPDF é uma ferramenta valiosa para desenvolvedores que buscam otimizar a geração de PDFs em seus projetos Node.js
Para atender às diversas demandas dos desenvolvedores, a biblioteca oferece uma variedade de opções de licenciamento, incluindo uma licença de avaliação gratuita e licenças adicionais para desenvolvedores que podem ser adquiridas. O pacote $799 Lite inclui uma licença permanente, garantia de reembolso de 30 dias, um ano de suporte de software e opções de atualização. Não há despesas adicionais além da compra inicial.




