HTML в PDF с узлом.js
Я ищу, чтобы создать для печати pdf
версия моего веб-сайта. Что-то вроде express.render()
только визуализировать страницу как pdf
кто-нибудь знает модуль, который делает это ?
если нет, то как бы вы идти о реализации одного ? Я видел, как некоторые методы говорят об использовании безголового браузера, например phantom.js
, но не уверен, что поток.
8 ответов:
распространяясь на ответ Мустафы.
A) установить http://phantomjs.org/ а потом
B) установите модуль фантомного узла https://github.com/amir20/phantomjs-node
C) Вот пример рендеринга pdf
var phantom = require('phantom'); phantom.create().then(function(ph) { ph.createPage().then(function(page) { page.open("http://www.google.com").then(function(status) { page.render('google.pdf').then(function() { console.log('Page Rendered'); ph.exit(); }); }); }); });
вывод PDF:
EDIT:молчат печати в формате PDF
java -jar pdfbox-app-2.0.2.jar PrintPDF -silentPrint C:\print_mypdf.pdf
Фантом.js это безголовый сервер webkit, и он загрузит любую веб-страницу и отобразит ее в памяти, хотя вы, возможно, не сможете ее увидеть, есть функция захвата экрана, в которой вы можете экспортировать текущее представление как PNG, PDF, JPEG и GIF. Взгляните на это пример из phantom.документация Яш
Если вы хотите экспортировать HTML в PDF. У вас есть много вариантов. без узла даже
Вариант 1:есть кнопка на html-странице, которая вызывает окно.функция печати. используйте браузеры родной html в pdf. используйте медиа-запросы, чтобы Ваша html-страница хорошо выглядела в pdf. и у вас также есть печать до и после событий, которые можно использовать для внесения изменений на страницу перед печатью.
2. htmltocanvas или rasterizeHTML. для преобразования HTML для canvas, затем вызовите toDataURL () на объекте canvas, чтобы получить изображение . и использовать библиотеку JavaScript, такие как jsPDF чтобы добавить это изображение в PDF-файл. Недостатком этого подхода является то, что pdf не становится редактируемым. Если вы хотите, чтобы данные, извлеченные из PDF, есть разные способы для этого. 3. @Jozzhard ответ
лучшее решение, которое я нашел, это html-pdf. Это просто и работать с большим html.
https://www.npmjs.com/package/html-pdf
Это так просто:
pdf.create(htm, options).toFile('./pdfname.pdf', function(err, res) { if (err) { console.log(err); } });
создать PDF из внешнего URL
вот адаптация предыдущих ответов, которая использует
html-pdf
, но также сочетает его сrequestify
так что он работает с внешним URL:установить зависимости
npm i -S html-pdf requestify
затем создайте скрипт:
//MakePDF.js var pdf = require('html-pdf'); var requestify = require('requestify'); var externalURL= 'http://www.google.com'; requestify.get(externalURL).then(function (response) { // Get the raw HTML response body var html = response.body; var config = {format: 'A4'}; // or format: 'letter' - see https://github.com/marcbachmann/node-html-pdf#options // Create the PDF pdf.create(html, config).toFile('pathtooutput/generated.pdf', function (err, res) { if (err) return console.log(err); console.log(res); // { filename: '/pathtooutput/generated.pdf' } }); });
тогда вы просто запустите из командной строки:
node MakePDF.js
смотрите, как ваш beautify pixel perfect PDF будет создан для вас (бесплатно!)
использовать html-pdf
var fs = require('fs'); var pdf = require('html-pdf'); var html = fs.readFileSync('./test/businesscard.html', 'utf8'); var options = { format: 'Letter' }; pdf.create(html, options).toFile('./businesscard.pdf', function(err, res) { if (err) return console.log(err); console.log(res); // { filename: '/app/businesscard.pdf' } });
пакета
Я html-pdf
простота в использовании и позволяет не только сохранять pdf в виде файла, но и передавать содержимое pdf в WriteStream (чтобы я мог передавать его непосредственно в хранилище Google, чтобы сохранить там мои отчеты).
использование css + изображений
он учитывает css. Единственная проблема, с которой я столкнулся - это игнорирование моих изображений. Решение, которое я нашел, было заменить url в
src
значение attrribute by в base64, например,
<img src="data:image/png;base64,iVBOR...kSuQmCC">
вы можете сделать это с помощью вашего кода или использовать один из онлайн конвертеров, например https://www.base64-image.de/
скомпилировать допустимый html код из фрагмента html + css
- я должен был получить фрагмент моего
html
документ (я только что приложил .метод html () на селекторе jQuery).- тогда я прочитал содержание соответствующего .
используя это два значения (хранятся в переменных
html
иcss
соответственно) я скомпилировал допустимый html-код с помощью строку шаблонаvar htmlContent = ` <!DOCTYPE html> <html> <head> <style> ${css} </style> </head> <body id=direct-sellers-bill> ${html} </body> </html>`
и передал его
create
метод html-pdf.
попробуйте использовать Puppeteer для создания PDF из HTML
пример отсюда https://github.com/chuongtrh/html_to_pdf