Как создать PDF с помощью wkhtmltopdf в Node.js

Вы когда-нибудь пытались создавать PDF-файлы со сложными и причудливыми диаграммами, используя PDFKit? такая **** задача не? Мы знаем об удивительном PDFKIT для node.js, PDFKit — это библиотека для создания документов PDF для Node и браузера, которая упрощает создание сложных многостраничных документов для печати. Следующий код должен генерировать простой PDF-документ с некоторым текстом:

var PDFDocument, doc;
var fs = require("fs");
PDFDocument = require('pdfkit');
doc = new PDFDocument;
doc.pipe(fs.createWriteStream('output.pdf'));
doc.fontSize(25).text('Some text with an embedded font!', 100, 100);
doc.addPage().fontSize(25).text('Here is some vector graphics...', 100, 100);
doc.save().moveTo(100, 150).lineTo(100, 250).lineTo(200, 250).fill("#FF3300");
doc.scale(0.6).translate(470, -380).path('M 250,75 L 323,301 131,161 369,161 177,301 z').fill('red', 'even-odd').restore();
doc.addPage().fillColor("blue").text('Here is a link!', 100, 100).underline(100, 100, 160, 27, {
color: "#0000FF"
}).link(100, 100, 160, 27, 'http://google.com/');
doc.end();

Ну, это должно создать output.pdf файл в пути, где вы выполняете сценарий. Функционально, однако, я бы не хотел рисовать сложные графики с использованием этого кода, конечно нет.

Альтернативой генерируемым на стороне сервера диаграммам является создание диаграмм с помощью Javascript (на стороне клиента). Существует множество библиотек Javascript, которые позволяют создавать необычные диаграммы, и вы можете извлечь их SVG (или изображение base64) и вернуть их на сервер, чтобы включить их в качестве изображения в PDF-файл. Звучит хорошо и функционально, однако у этого решения есть недостаток. SVG изменится и вызовет проблемы с размерами позже в вашем PDF в соответствии с разрешением монитора вашего пользователя или размерами окна браузера.

Некоторые веб-приложения, как решение, сгенерирует HTML-представление как ответ в браузере(который будет отображать ваши модные диаграммы), и пользователь должен будет использовать (и знать, как) браузер для сохранения (или печати) содержимого в формате PDF. Однако, как пользователь, вы можете просто захотеть скачать PDF одной кнопкой, выбрать, где вы хотите сохранить его, и все.

Проблемы везде, но вот где wkhtmltopdf Это очень удобно, так как вы сможете писать CSS, HTML и Javascript так же, как на веб-сайте (с некоторыми минимальными ограничениями), и ваш PDF будет выглядеть потрясающе.

В этой статье вы узнаете, как создать PDF-файл с помощью wkhtmltopdf в вашем проекте Node.js.

Требования

Тебе понадобиться wkhtmltopdf доступно в вашей системе и доступно в командной строке. wkhtmltopdf — это инструмент командной строки для рендеринга HTML в PDF и различные форматы изображений с использованием движка рендеринга Qt WebKit. Они работают полностью «без головы» и не требуют отображения или обслуживания дисплея.

  • Окна: Вы можете скачать установщик для каждой архитектуры (x86 и x64) в площадь установки. Хотя вы можете изменить путь к исполняемому файлу wkhtmltopdf позже в файле config.yml, желательно иметь wkhtmltopdf доступно как переменная среды в вашей системе (если вы не хотите создавать переменную среды для wkhtmltopdf, вы можете указать полный путь к исполняемому файлу позже).
  • Debian / Ubuntu: Вы можете установить дистрибутив из wkhtmltopdf непосредственно в консоли, используя следующую команду:
sudo apt-get install wkhtmltopdf

Убедившись, что в вашей системе установлен wkhtmltopdf, перейдите к использованию в Node.js.

Реализация

Для обработки wkhtmltopdf из Node.js нам нужно полагаться на сторонний модуль. Модуль wkhtmltopdf предоставляет полезную оболочку инструкций командной строки для wkhtmltopdf для генерации PDF-файлов из Node.js, для установки этого модуля выполните в терминале следующую команду:

npm install wkhtmltopdf

После установки вы сможете использовать модуль wkhtmltopdf, используя require('wkhtmltopdf'),

Будь уверен wkhtmltopdf инструмент командной строки находится в вашем PATH, когда вы закончите установку. Если вы не хотите делать это по какой-либо причине, вы можете изменить require('wkhtmltopdf').command свойство к пути к wkhtmltopdf инструмент командной строки:

var wkhtmltopdf = require('wkhtmltopdf');
// If you don't have wkhtmltopdf in the PATH, then provide
// the path to the executable (in this case for windows would be):
wkhtmltopdf.command = "C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";

И тогда вы сможете правильно работать с wkhtmltopdf в Node.js.

Создание PDF с сайта

Укажите веб-URL (с протоколом http или https) в качестве первого параметра для отображения веб-сайта в формате PDF и укажите выходной путь:

var wkhtmltopdf = require('wkhtmltopdf');
wkhtmltopdf('http://site.com', {
output: 'ourcodeworld.pdf',
pageSize: 'letter'
});

Создание PDF из HTML-файла

Чтобы создать PDF-файл из содержимого HTML-файла, укажите HTML-код, полученный из файла с помощью filesystem.readFileSync метод:

var wkhtmltopdf = require('wkhtmltopdf');
var fs = require("fs");
wkhtmltopdf(fs.readFileSync("index.html", "utf8"), {
output: 'demo.pdf',
pageSize: 'letter'
});

В этом примере HTML-файл будет index.html и имеет следующее содержание:


Hello World !

This is my awesome first PDF generated using WKHTMLTOPDF with Node.js

UTF-8 Test : κσμε

Image :

SVG Example :

Canvas Example with Javascript:

document.getElementById("dinamic-content").innerHTML = 'This string has been appended using javascript'; // Draw circle on canvas var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); ctx.beginPath(); ctx.arc(100,75,50,0,2*Math.PI); ctx.stroke();

И выполнение кода узла должно генерировать demo.pdf файл и он будет выглядеть так:

Node.js wkhtmltopdf pdf пример

Создать PDF из строки HTML

Точно так же, как вы делаете для рендеринга PDF из файла HTML, просто укажите строку HTML в качестве первого параметра:

var wkhtmltopdf = require('wkhtmltopdf');
var htmlContent = "Test

Hello world

"; wkhtmltopdf(htmlContent, { output: 'demo.pdf', pageSize: 'letter' });

Замечания: в случае, если вы хотите вернуть PDF-файл в качестве ответа, поскольку вы используете Node.js с http-сервером, вы можете просто создать этот файл и вернуть его в качестве ответа.

Финальные заметки

Ссылка на основную публикацию
Adblock
detector