Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конвертация HTML страницы в PDF (https://javascript.ru/forum/misc/75343-konvertaciya-html-stranicy-v-pdf.html)

giwuf 25.09.2018 19:41

Конвертация 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 не получается..

laimas 25.09.2018 21:46

Цитата:

Сообщение от giwuf
в новой версии получить скрин страницы, но отправить в pdf не получается..

А проку от такого PDF, не проще ли просто изображение?

giwuf 25.09.2018 22:22

Цитата:

Сообщение от laimas (Сообщение 495417)
А проку от такого PDF, не проще ли просто изображение?

laimas,
суть в том, чтобы сделать и сохранить док именно в pdf, но да, оно по сути иммитация картинки

laimas 25.09.2018 22:30

Цитата:

Сообщение от giwuf
оно по сути иммитация картинки

Скорее наоборот, имитация PDF, в нем от PDF, в смысле пользы, 0,00001%. И просматривать неудобно, и стороннее ПО нужно, которое без пользы в данном случае.

Aetae 25.09.2018 22:31

Во первых:
Загрузка <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, заказчик хочет пдф - будет ему пдф.

giwuf 25.09.2018 22:59

Цитата:

Сообщение от Aetae (Сообщение 495421)
Во первых:
Загрузка <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');
		}

laimas 26.09.2018 04:21

Цитата:

Сообщение от Aetae
заказчик хочет пдф - будет ему пдф.

Да, заказчик бывает и как диагноз. )

Есть конверторы html-pdf, для серверной части я как-то использовал такую библиотеку, интересно есть ли подобные решения для клиента или же как сторонний сервис через клиентское API.

giwuf 26.09.2018 09:48

Цитата:

Сообщение от laimas (Сообщение 495424)
Да, заказчик бывает и как диагноз. )

Есть конверторы html-pdf, для серверной части я как-то использовал такую библиотеку, интересно есть ли подобные решения для клиента или же как сторонний сервис через клиентское API.

laimas,
а такая библиотека с jquery работать умеет или только с инлайновым javascript?

giwuf 26.09.2018 10:21

Aetae,
Посмотрите, чего в итоге добился. Канвас создается, страница скачивается.
Сделал демо-пример

При первом клике на кнопку скачать (вверху) рендерится картинка, при втором - скачивается инфа со страницы, но, как видим в скачаном файле, сохраняется только текстовая информация, без сохранение канвас картинки, причем киррилические буквы прописываются кракозябрами.
Как это можно поправить? Ну и конечно же в идеале сделать так, чтобы с первого клика скачивалась страничка.

laimas 26.09.2018 13:55

Цитата:

Сообщение от giwuf
а такая библиотека с jquery работать умеет или только с инлайновым javascript

Библиотека о которой я говорил, для РНР, то есть серверная. Есть ли нечто для клиента или же как сторонний сервис для клиента, я не знаю, этот вопрос меня не интересовал и на данный момент тоже не стоит передо мной. Поищите в сети, если есть и край как хочется делать клиентом, то используйте, по крайней мере это будет действительно легковесный pdf документ, а не порнография с картинкой. ;)


Часовой пояс GMT +3, время: 17:38.