printPdf 1.1.0
Основные изменения:
— Все параметры перенесены в системные настройки.
— Переписанs стили и скрипты(на чистом js)
— Обновлены библиотеки
— Добавлены события
Для этого нужно вызвать функцию printPdf, которая принимает 2 параметра
Режим печати(mode):
Меняем название файла
Добавляем логотип modstore и пронумеруем страницы:
Показываем сообщение:
Еще примеры:
Открываем pdf в новом окне:
Ссылка на компонент.
Всем добра!
— Все параметры перенесены в системные настройки.
— Переписанs стили и скрипты(на чистом js)
— Обновлены библиотеки
— Добавлены события
Демо
Как создать pdf файл:
Для этого нужно вызвать функцию printPdf, которая принимает 2 параметра
- container — контейнер, который нужно распечатать. По умолчанию: 'body'
- mode — режим печати: default или page. По умолчанию: default
$(document).on('click', '#printPdf', function(e){
e.preventDefault();
printPdf('.printPdf');
});
Режим печати(mode):
- default — Обычная печать, но существует ограничение по кол-ву страниц ~ 6.
- page — Постраничная печать. Разделяет каждый контейнер на отдельную страницу. Ограничений нет, но не умеет сохранять ссылки — аналогично обычному скриншоту.
Css классы:
- print-break — используется для разрыва страницы. Работает только в режиме: 'default'
- print-hide — для скрытия элементов при печати.
Js cобытия:
startPrint
Перед началом создание pdf файла- config — настройки печати
Меняем название файла
$(document).on('startPrint', function(e){
let config = e.detail.config;
config.print.filename = 'newFileName';
});
createPdf
После получение содержимого страницы. Здесь можно изменить pdf файл.- pdf — объект pdf
Добавляем логотип modstore и пронумеруем страницы:
$(document).on('createPdf', function(e){
let pdf = e.detail.pdf;
let totalPages = pdf.internal.getNumberOfPages();
let logo = '/assets/img/printPdf/modstore.png';
for (i = 1; i <= totalPages; i++) {
pdf.setPage(i); // получаем текущую страницу
pdf.setFontSize(10);
pdf.setTextColor(150);
let pdf_width = pdf.internal.pageSize.getWidth()/2.25;
let pdf_height = pdf.internal.pageSize.getHeight() - 1;
pdf.text('Page ' + i + ' of ' + totalPages, pdf_width, pdf_height);
pdf.addImage(logo, pdf_width + 4, 0.5, 2, 0);
}
});
endPrint
После создания файла pdf.- pdf — объект pdf
Показываем сообщение:
$(document).on('endPrint', function(e){
let pdf = e.detail.pdf;
let content = 'Вы можете открыть файл по <a href="'+pdf.output('bloburl')+'">ссылке</a>';
swal('prindPdf', content, 'info');
});
Еще примеры:
Открываем pdf в новом окне:
$(document).on('createPdf', function(e){
let pdf = e.detail.pdf;
// Здесь можно изменить содержимое pdf
// Открываем в номом окне
pdf.output("pdfobjectnewwindow");
});
Дерево настроек:
- config
- print
- margin — Отступы в PDF файле. По умолчанию: [0,0,0,0]
- filename — Имя файла для экспортированного PDF
- image
- type — Тип изображения. Возможные значения: «png», «jpeg» и «webp» (в Chrome). По умолчанию: «jpeg»
- quality — Качество изображения от 0 до 1
- html2canvas
- scale — Масштаб. Влияет на качество pdf файла. По умолчанию: 2
- useCORS — Загрузить изображения с сервера с помощью CORS. По умолчанию: false
- jsPDF
- unit — Единица измерения, которая будет использоваться при указании координат. По умолчанию: «in»
- format — Формат страницы. По умолчанию: auto
- orientation — Ориентация страницы. По умолчанию: auto (landscape, portrait, auto)
- compress — Сжать сгенерированный PDF. По умолчанию: true
- save — Сохранять файл PDF. По умолчанию: Да
- print
Ссылка на компонент.
Всем добра!
Поблагодарить автора
Отправить деньги
Комментарии: 31
Но, компонент работает без jQuery.*довольные звуки сторонников vanilla js*
Еще не довольные. Все примеры вызовов через jQuery написаны.
P.S. Примеры показаны на jQuery потому что мне так удобно. Но, компонент работает без jQuery.Можно было бы написать примеры и на jQuery и на ванильке. Все таки продаете компонент юзерам и тут важно удобство их, а не ваше.
примеры соответствуют цене компонента))
комментарий соответствует интеллекту комментатора))
справедливости ради, в примерах от jQuery только 1 строчка
думаю, любой vanilla js разработчик осилит ее заменить на
думаю, любой vanilla js разработчик осилит ее заменить на
document.addEventListener('eventName', e => {});
Ну с таким подходом можно 1/3 документаций не писать… :)
А в чем толк, если pdf создается с помощью canvas -> photo -> pdf. То есть текст не выделить, работу с документом не продолжить.
Используйте github.com/dompdf/dompdf к примеру, он хорошо html разбирает, сохраняя элементы.
Либо если удобно использовать html2pdf, то подготавливайте и унифицируйте элементы, а не сохраняйте скрин секции в pdf.
Используйте github.com/dompdf/dompdf к примеру, он хорошо html разбирает, сохраняя элементы.
Либо если удобно использовать html2pdf, то подготавливайте и унифицируйте элементы, а не сохраняйте скрин секции в pdf.
что значит «в чем толк». Человек сделал свое решение и поделился им за символическую цену.
Наверняка в мире существуют сотни способов лучше и сотни хуже — но это решение вот такое.
На мой взгляд, это все равно что сказать, в чем толк продолжать писать романы если «Мастер и Маргарита» уже написан или рисовать картины после «Монны Лизы».
Наверняка в мире существуют сотни способов лучше и сотни хуже — но это решение вот такое.
На мой взгляд, это все равно что сказать, в чем толк продолжать писать романы если «Мастер и Маргарита» уже написан или рисовать картины после «Монны Лизы».
Не стоит сравнивать мягкое с теплым. pdf документ нужен для чего?! Для отчетности прежде всего.
Какая может быть отчетность с документом, где нельзя выделить информацию? Таким же макаром можно просто фотографию печатать и вводить информацию по картинке. Сложности в создании более человечного pdf нет, вовсе.
Какая может быть отчетность с документом, где нельзя выделить информацию? Таким же макаром можно просто фотографию печатать и вводить информацию по картинке. Сложности в создании более человечного pdf нет, вовсе.
Все относительно. Я лично совершенно не воспринимаю формат pdf как формат документов для отчетности.
Почитайте что такое pdf, а не то, как вы его воспринимаете. Это документ прежде всего, а не фотография. Не вижу смысла продолжать дискуссию и обсуждать, ваши ощущения мира.
Есть разные задачи. Например, у меня была такая:
Есть сайт с таблицами, эти таблицы нужно поместить в pdf и затем распечатать.
Вот основные условия:
1. Это должно работать на фронте.
2. Каждая таблица должна быть на новой странице.
3. ctrl + p не подходит, да и не так как нужно генерирует файл для печати.
Поэтому dompdf сразу отпадает и лучшее решение, что я нашел это html2pdf.
Есть сайт с таблицами, эти таблицы нужно поместить в pdf и затем распечатать.
Вот основные условия:
1. Это должно работать на фронте.
2. Каждая таблица должна быть на новой странице.
3. ctrl + p не подходит, да и не так как нужно генерирует файл для печати.
Поэтому dompdf сразу отпадает и лучшее решение, что я нашел это html2pdf.
А в чем толк, если pdf создается с помощью canvas -> photo -> pdfЕсли вам не подходит, это не означает, что и другим не подходит. В чем толк вашего комментария?
если удобно использовать html2pdf, то подготавливайте и унифицируйте элементыЕсть пример как это можно сделать?
Джедайский способ, которым с недавних пор пользуюсь:
Плюха в том, что можно сами данные в скрытый див засунуть, как-то интерактивно их менять, например подставлять имя-фамилию и после этого уже пускать в печать/сохранение.
var divContents = $("#toPrint").html();
var printWindow = window.open('', '', 'height=720,width=1280');
printWindow.document.write('<html><head><title>Это будет напечатано</title><link rel="stylesheet" href="css/print.css" />'); // стили для печатаемого блока
printWindow.document.write('</head><body >');
printWindow.document.write(divContents);
printWindow.document.write('</body></html>');
printWindow.document.close();
printWindow.print();
в итоге открывается окошко с отдельно нужным контентом из дива #toPrint и сразу диалог печати, если надо — печатаем, если надо — сохраняем в пдф.Плюха в том, что можно сами данные в скрытый див засунуть, как-то интерактивно их менять, например подставлять имя-фамилию и после этого уже пускать в печать/сохранение.
А если нужно перенести данные но новую страницу?
Тырк
Есть аналогичное правило page-break-before, если удобнее так.
Есть аналогичное правило page-break-before, если удобнее так.
Это я знаю, но разрыв не происходит по вашему примеру. Может я не так делаю. printPdf тоже использует это свойство.
Ваш пример, все равно не решил бы мою задачу.
Единственный плюс в вашем варианте, это то, что можно изменить html.
Спасибо, что поделились!
Ваш пример, все равно не решил бы мою задачу.
Единственный плюс в вашем варианте, это то, что можно изменить html.
Спасибо, что поделились!
Не выводит картинки на печать, а именно лого в SVG
вот скрипт вызова
вот скрипт вызова
$(document).on('click', '#printPdf', function(e){
e.preventDefault();
printPdf();
});
$(document).on('createPdf', function(e){
let pdf = e.detail.pdf;
pdf.output("pdfobjectnewwindow");
});
может кто сталкивался?
Добрый день, Александр!
Напишите мне в тех поддержку или скиньте сайт
Напишите мне в тех поддержку или скиньте сайт
Обновила, кэш почистила. И кнопка печати перестала работать.
А оказывается скрипт добавить теперь нужно? :)
А оказывается скрипт добавить теперь нужно? :)
А почему послетали размеры в файле pdf после обновлений? Бл*, и теперь нужно разбираться, почему в А4 перестало влазить окно…
напишите в тех. поддержку, я посмотрю.
Добрый день! Есть возможность сохранять в формате word?
Еле-еле закачал, но не ставится. Проверьте, пожалуйста. У меня modx 2 8 1
modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
Could not generate encryption key
Vehicle c0ae0c04cda63f3d2aca3d3c26835892 in transport printpdf-1.1.0-pl failed to install and indicated the process should be aborted.
Невозможно установить пакет с подписью: printpdf-1.1.0-pl
Тоже самое…
Could not generate encryption key
Vehicle c0ae0c04cda63f3d2aca3d3c26835892 in transport printpdf-1.1.0-pl failed to install and indicated the process should be aborted.
Невозможно установить пакет с подписью: printpdf-1.1.0-pl
Could not generate encryption key
Vehicle c0ae0c04cda63f3d2aca3d3c26835892 in transport printpdf-1.1.0-pl failed to install and indicated the process should be aborted.
Невозможно установить пакет с подписью: printpdf-1.1.0-pl
Вы пытаетесь установить зашифрованный пакет. Вероятно он ранее был платным.
Чтобы установить такой пакет, вам нужно после загрузки пакета в админку привязать его к поставщику у которого заполнен логин и ключ
Чтобы установить такой пакет, вам нужно после загрузки пакета в админку привязать его к поставщику у которого заполнен логин и ключ
Привет, все привязано. И все равно не работает.
Тогда нужно решать либо с автором, либо еще может быть с техподдержкой магазина
Спасибо, еще вариант codepen.io/marinaroaugusto/pen/JaxZLQ
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.