Преобразование HTML в PDF в Node.js: подробное руководство с примерами кода

Вы хотите преобразовать HTML в PDF в своем приложении Node.js? Если вам нужно создавать отчеты в формате PDF, счета-фактуры или любые другие документы для печати из ваших шаблонов HTML, Node.js предоставляет несколько методов для выполнения этой задачи. В этой статье мы рассмотрим различные подходы к преобразованию HTML в PDF с помощью Node.js, а также приведем примеры кода, которые помогут вам начать работу.

Метод 1: использование специальной библиотеки – pdfkit

Один популярный метод создания PDF-файлов в Node.js — использование библиотеки pdfkit. Он предоставляет простой и мощный API для программного создания PDF-документов. Вот пример фрагмента кода для преобразования HTML в PDF с помощью pdfkit:

const PDFDocument = require('pdfkit');
const fs = require('fs');
const generatePDF = (htmlContent, outputPath) => {
  const doc = new PDFDocument();
  doc.pipe(fs.createWriteStream(outputPath));
  doc.text(htmlContent, 100, 100); // Replace with your HTML content
  doc.end();
};
const htmlContent = '<html><body><h1>Hello, PDF!</h1></body></html>';
const outputPath = 'output.pdf';
generatePDF(htmlContent, outputPath);

Метод 2: использование безголового браузера – puppeteer

Еще один мощный способ конвертировать HTML в PDF в Node.js — использовать автономный браузер, например puppeteer. Он позволяет отображать HTML-страницы, включая CSS и JavaScript, и создавать на их основе PDF-файлы. Вот пример фрагмента кода:

const puppeteer = require('puppeteer');
const generatePDF = async (htmlContent, outputPath) => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setContent(htmlContent);
  await page.pdf({ path: outputPath });
  await browser.close();
};
const htmlContent = '<html><body><h1>Hello, PDF!</h1></body></html>';
const outputPath = 'output.pdf';
generatePDF(htmlContent, outputPath);

Метод 3: использование онлайн-сервиса конвертации – pdfcrowd

Если вы предпочитаете, чтобы преобразование HTML в PDF выполнялось внешним сервисом, вы можете использовать pdfcrowd. Он предлагает RESTful API, который позволяет конвертировать HTML в PDF путем выполнения HTTP-запросов. Вот пример фрагмента кода с использованием pdfcrowd:

const https = require('https');
const fs = require('fs');
const generatePDF = (htmlContent, outputPath) => {
  const apiKey = 'your-api-key';
  const url = `https://pdfcrowd.com/api/v2/pdf/convert/html/`;
  const req = https.request(
    {
      host: 'pdfcrowd.com',
      path: '/api/v2/pdf/convert/html/',
      method: 'POST',
      auth: apiKey + ':',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    },
    (res) => {
      const writeStream = fs.createWriteStream(outputPath);
      res.pipe(writeStream);
    }
  );
  req.write(`html=${encodeURIComponent(htmlContent)}`);
  req.end();
};
const htmlContent = '<html><body><h1>Hello, PDF!</h1></body></html>';
const outputPath = 'output.pdf';
generatePDF(htmlContent, outputPath);

Метод 4: использование механизма шаблонов – ejs

Если вы используете в своем приложении Node.js механизм шаблонов, такой как ejs, вы можете отображать свои HTML-шаблоны и конвертировать их в PDF с помощью pdfkitили 14. Такой подход позволяет динамически создавать PDF-документы на основе ваших шаблонов и данных.

Заключение

В этой статье мы рассмотрели несколько методов преобразования HTML в PDF в Node.js. Мы рассмотрели использование таких библиотек, как pdfkitи puppeteer, использование автономных браузеров и даже использование сервисов онлайн-конвертации, таких как pdfcrowd. В зависимости от ваших конкретных требований и предпочтений вы можете выбрать метод, который наилучшим образом соответствует вашим потребностям. Так что вперед, начните создавать красивые PDF-файлы из вашего HTML-контента в Node.js!