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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
думаю, любой vanilla js разработчик осилит ее заменить на
Используйте github.com/dompdf/dompdf к примеру, он хорошо html разбирает, сохраняя элементы.
Либо если удобно использовать html2pdf, то подготавливайте и унифицируйте элементы, а не сохраняйте скрин секции в pdf.
Наверняка в мире существуют сотни способов лучше и сотни хуже — но это решение вот такое.
На мой взгляд, это все равно что сказать, в чем толк продолжать писать романы если «Мастер и Маргарита» уже написан или рисовать картины после «Монны Лизы».
Какая может быть отчетность с документом, где нельзя выделить информацию? Таким же макаром можно просто фотографию печатать и вводить информацию по картинке. Сложности в создании более человечного pdf нет, вовсе.
Есть сайт с таблицами, эти таблицы нужно поместить в pdf и затем распечатать.
Вот основные условия:
1. Это должно работать на фронте.
2. Каждая таблица должна быть на новой странице.
3. ctrl + p не подходит, да и не так как нужно генерирует файл для печати.
Поэтому dompdf сразу отпадает и лучшее решение, что я нашел это html2pdf.
Если вам не подходит, это не означает, что и другим не подходит. В чем толк вашего комментария?
Есть пример как это можно сделать?
в итоге открывается окошко с отдельно нужным контентом из дива #toPrint и сразу диалог печати, если надо — печатаем, если надо — сохраняем в пдф.
Плюха в том, что можно сами данные в скрытый див засунуть, как-то интерактивно их менять, например подставлять имя-фамилию и после этого уже пускать в печать/сохранение.
Есть аналогичное правило page-break-before, если удобнее так.
Ваш пример, все равно не решил бы мою задачу.
Единственный плюс в вашем варианте, это то, что можно изменить html.
Спасибо, что поделились!
вот скрипт вызова
может кто сталкивался?
Напишите мне в тех поддержку или скиньте сайт
А оказывается скрипт добавить теперь нужно? :)
Фарит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
Чтобы установить такой пакет, вам нужно после загрузки пакета в админку привязать его к поставщику у которого заполнен логин и ключ
Фарит