25.09.2018, 19:41
|
Профессор
|
|
Регистрация: 16.05.2017
Сообщений: 167
|
|
Конвертация HTML страницы в PDF
Хочу сконвертировать html страницу в pdf средствами javascript.
Делаю это используя библиотеки
по инструкции из видео
Но, получаю в консоли запись:
html2canvas: Canvas renderer initialized (2543x739 at 0,0) with scale 1
и соответственно файл не сохраняется. Можно это как-то поправить или какой-то другой метод использовать?
Сделал 2 наглядных образца
старая версия библиотеки html2canvas с onrendered
http://jsfiddle.net/bwLzno6t/
новая с использованием then(canvas =>
http://jsfiddle.net/vd237at6/
В обоих случая в примерах не работают, на моем тестовом примере удается в новой версии получить скрин страницы, но отправить в pdf не получается..
Последний раз редактировалось giwuf, 25.09.2018 в 21:39.
|
|
25.09.2018, 21:46
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от giwuf
|
в новой версии получить скрин страницы, но отправить в pdf не получается..
|
А проку от такого PDF, не проще ли просто изображение?
|
|
25.09.2018, 22:22
|
Профессор
|
|
Регистрация: 16.05.2017
Сообщений: 167
|
|
Сообщение от laimas
|
А проку от такого PDF, не проще ли просто изображение?
|
laimas,
суть в том, чтобы сделать и сохранить док именно в pdf, но да, оно по сути иммитация картинки
|
|
25.09.2018, 22:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от giwuf
|
оно по сути иммитация картинки
|
Скорее наоборот, имитация PDF, в нем от PDF, в смысле пользы, 0,00001%. И просматривать неудобно, и стороннее ПО нужно, которое без пользы в данном случае.
|
|
25.09.2018, 22:31
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Во первых:
Загрузка <script> по адресу «[url]https://github.com/MrRio/jsPDF/blob/master/dist/jspdf.min.js»[/url] не удалась.
Загрузка <script> по адресу «[url]https://github.com/stackp/promisejs/blob/master/promise.js»[/url] не удалась.
(github не любит jsfiddle)
Во вторых функция getPDF созданная внутри анонимной функции, вызываемой по событию load, доступна только внутри этой самой функции.
По сути у вас и скрипты не подключены и функция по нажатию не может быть вызвана. Оно не то что не работает, оно и не пытается.
laimas, заказчик хочет пдф - будет ему пдф.
__________________
29375, 35
|
|
25.09.2018, 22:59
|
Профессор
|
|
Регистрация: 16.05.2017
Сообщений: 167
|
|
Сообщение от Aetae
|
Во первых:
Загрузка <script> по адресу «[url]https://github.com/MrRio/jsPDF/blob/master/dist/jspdf.min.js»[/url] не удалась.
Загрузка <script> по адресу «[url]https://github.com/stackp/promisejs/blob/master/promise.js»[/url] не удалась.
(github не любит jsfiddle)
Во вторых функция getPDF созданная внутри анонимной функции, вызываемой по событию load, доступна только внутри этой самой функции.
По сути у вас и скрипты не подключены и функция по нажатию не может быть вызвана. Оно не то что не работает, оно и не пытается.
laimas, заказчик хочет пдф - будет ему пдф.
|
Aetae,
понял. Давайте так: сделал некий набросок на тестовом сервере по ссылке
http://a-lot-of-money.ru/rasterize/
Что добился: канвас создается, pdf скачивается, вот только без данных, которые записывает канвас, т.е. по сути успевает отработать раньше, чем рендерится картинка. Если этот момент исправить - все заработает.
Здесь колбек без дополнительных параметров меня не спасает..
Делаю так, когда по первому клику на кнопку получаю зарендеренную страницу, но скачивается все равно только статика, которая была изначально. Вот здесь встрял и не знаю куда дальше двигаться
function getPDF() {
doCanvas();
$(document).bind('function_a_complete', doPDF);
}
function doCanvas() {
html2canvas(document.querySelector("#myDiv")).then(canvas => {
document.querySelector("#newDiv").appendChild(canvas);
});
$(document).trigger('function_a_complete');
}
function doPDF() {
console.log("do pdf");
var doc = new jsPDF();
doc.fromHTML($('#newDiv').get(0), 20, 20, {'width':500});
doc.save('test.pdf');
}
Последний раз редактировалось giwuf, 25.09.2018 в 23:26.
|
|
26.09.2018, 04:21
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Aetae
|
заказчик хочет пдф - будет ему пдф.
|
Да, заказчик бывает и как диагноз. )
Есть конверторы html-pdf, для серверной части я как-то использовал такую библиотеку, интересно есть ли подобные решения для клиента или же как сторонний сервис через клиентское API.
|
|
26.09.2018, 09:48
|
Профессор
|
|
Регистрация: 16.05.2017
Сообщений: 167
|
|
Сообщение от laimas
|
Да, заказчик бывает и как диагноз. )
Есть конверторы html-pdf, для серверной части я как-то использовал такую библиотеку, интересно есть ли подобные решения для клиента или же как сторонний сервис через клиентское API.
|
laimas,
а такая библиотека с jquery работать умеет или только с инлайновым javascript?
|
|
26.09.2018, 10:21
|
Профессор
|
|
Регистрация: 16.05.2017
Сообщений: 167
|
|
Aetae,
Посмотрите, чего в итоге добился. Канвас создается, страница скачивается.
Сделал демо-пример
При первом клике на кнопку скачать (вверху) рендерится картинка, при втором - скачивается инфа со страницы, но, как видим в скачаном файле, сохраняется только текстовая информация, без сохранение канвас картинки, причем киррилические буквы прописываются кракозябрами.
Как это можно поправить? Ну и конечно же в идеале сделать так, чтобы с первого клика скачивалась страничка.
|
|
26.09.2018, 13:55
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от giwuf
|
а такая библиотека с jquery работать умеет или только с инлайновым javascript
|
Библиотека о которой я говорил, для РНР, то есть серверная. Есть ли нечто для клиента или же как сторонний сервис для клиента, я не знаю, этот вопрос меня не интересовал и на данный момент тоже не стоит передо мной. Поищите в сети, если есть и край как хочется делать клиентом, то используйте, по крайней мере это будет действительно легковесный pdf документ, а не порнография с картинкой.
Последний раз редактировалось laimas, 26.09.2018 в 14:00.
|
|
|
|