Отправка сформированного на JS PDF-файла на почту клиенту.
Всем привет.
Есть страница, на которой размещен калькулятор. Я формирую при помощи pdfmake https://github.com/bpampuch/pdfmake pdf файл, который можно скачать или распечатать. При этом в форме есть галочка, отправить расчеты мне на почту. Соответсвенно если она отмечена, то этот файл должен уходить на почту клиенту. В мануале есть открыть, печатать, скачать...
pdfMake.createPdf(docInfo).download('name.pdf');
pdfMake.createPdf(docInfo).open('name.pdf');
pdfMake.createPdf(docInfo).print('name.pdf');
Как этот файл во вложение засунуть? |
Цитата:
|
Цитата:
Но файл в любом случае куда-то отправляется. Если есть галочка, то и клиенту и администратору. Если галочки нет, то только администратору. Я не понимаю как этот файл "выцепить". Форму в которую подгружается файл, и который нужно отправить по почте я понимаю. Делал. А как этот сформированный где-то файл запихнуть в письмо я не понимаю... |
Цитата:
Как примечание: чем большие возможностей предоставляется, тем больше приключений на свою задницу ищет разработчик :) Почему именно PDF, это калькулятор с плюшками в виде картинок, дизайн которого определяется исключительно пользователем? А проще, обычной html-таблицей результат расчета представить невозможно? PDF, это же не брелок, который можно прицепить к связке ключей и носить с собой. |
Цитата:
|
Цитата:
Нет там такого... Посмотрел, там много всего по выводу контента и настройкам самого файла. С этим всем я разобрался. А про то что этот файл можно отправить - ни слова. И в интернете я не нашел как его отправить... |
Цитата:
А вы о чем? |
Цитата:
такая js - https://github.com/bpampuch/pdfmake |
Ну и какие проблемы? Знаний хватит на простейшее - отправить текстом base64 (если файл не велик) и все необходимое сделать на сервере? Метод то в примере даже описан.
|
Я в документации ничего не нашел про это...
ТАм кроме стилей и 3-х функций ничего и нет... Я сделал по инструкции. Файл формируется. Выводится на печать.
// Вывод на печать файла
var docInfo = {
info: {
title:'Тестовый документ PDF',
author:'Viktor',
subject:'Theme',
keywords:'Ключевые слова'
},
pageSize:'A4',
pageOrientation:'portrait',//'portrait'
pageMargins:[50,50,50,50],
header:[
{
text: 'Общая сумма ремонта = ' + full_summ,
alignment:'center',//left right
}
],
footer:function(currentPage,pageCount) {
return {
text: currentPage.toString() + 'из' + pageCount,
alignment:'right',
margin:[0,30,10,50]
}
},
content: [
{
text:'Расчет стоимости ремонта квартиры',
margin:[0,30,0,30],
style:'header'
//pageBreak:'after'
},
{
text:'Параметры квартиры',
margin:[0,0,0,15],
style:'headertwo'
//pageBreak:'before'
},
{
text: 'Количество комнат - ' + print_rooms,
margin:[20,0,0,10],
style:'maintext'
//pageBreak:'before'
},
{
text: 'Площадь квартиры = ' + square + 'кв.м.',
margin:[20,0,0,10],
style:'maintext'
//pageBreak:'before'
},
{
text: 'Количество санузлов = ' + sanuzel,
margin:[20,0,0,10],
style:'maintext'
//pageBreak:'before'
},
{
text:'Капитальные работы',
margin:[0,0,0,15],
style:'headertwo'
//pageBreak:'before'
},
{
text: 'Мокрая стяжка пола - ' + print_styajka,
margin:[20,0,0,10],
style:'maintext'
//pageBreak:'before'
},
{
text: 'Возведение межкомнатных стен - ' + print_walls,
margin:[20,0,0,10],
style:'maintext'
//pageBreak:'before'
},
{
text: 'Демонтаж - ' + print_demontaj,
margin:[20,0,0,10],
style:'maintext'
//pageBreak:'before'
},
{
text: 'Разводка электрики - ' + print_electrik,
margin:[20,0,0,10],
style:'maintext'
//pageBreak:'before'
},
{
text: 'В моем доме деревянные перекрытия - ' + print_woods,
margin:[20,0,0,10],
style:'maintext'
//pageBreak:'before'
},
],
styles: {
header: {
fontSize:20,
bold:true,
alignment:'center'
},
headertwo: {
fontSize:16,
bold:true,
alignment:'left'
},
maintext: {
fontSize:14,
bold:false,
alignment:'left'
}
}
}
pdfMake.createPdf(docInfo).print('name.pdf');
|
Цитата:
const pdfDocGenerator = pdfMake.createPdf(docDefinition);
pdfDocGenerator.getBase64((data) => {
//тут помещайте data в скрытое поле формы, и отправляйте на сервер
//выполнив этот метод, если выбрана отправка
});
Как вы читаете доки то? А можно и BLOB отправить как файл, и такой метод есть. |
Цитата:
Я имею ввиду помещаю я дату в поле. Например так: <input type="hidden" id="pdfdoc" name="pdfdoc" />
const pdfDocGenerator = pdfMake.createPdf(docDefinition);
pdfDocGenerator.getBase64((data) => {
$('#pdfdoc').val(data);
});
И потом это поле передаю на сервер. Потом на сервере нужно будет что-то делать, чтобы из этого собрать файл? Или это будет просто текстовая информация? |
Цитата:
|
Чего вы собираетесь делать с файлом этим на сервере, да и вообще нафига он нужен, но почтой файл передается как раз в base64 (Content-Transfer-Encoding:base64), то есть переданный таким образом файл и декодировать не нужно будет, если он только для отправления почты. Его нужно будет только разбить на строки, в РНР это функция chunk_split.
|
Думаю сейчас разберусь. Другой вопрос вылез.
Сейчас написано так.
function changeFunc() {
//Тут идет функция, в которой происходят все расчеты.
// Поскольку при формировании pdf используются данные расчетов, то формирование переменной для дальнейшего формирования pdf происходит в этой же функции.
var docInfo = { // Тут контент и настройки файла };
};
$('#printfile').click(function() {
pdfMake.createPdf(docInfo).print('name.pdf');
});
Дальше есть кнопка "Распечатать". По идее при клике на кнопку нужно сделать
pdfMake.createPdf(docInfo).print('name.pdf');
Но переменная docInfo получается не определена... МОжно конечно сделать еще одну функцию 2 в одном (расчеты + печать файла) и повесить ее на клик по кнопке "Распечатать". Но по сути должна быть еще одна функция, которая должна висеть на событии submit, формировать файл pdf и передавать в инпут содержимое файла. Это получается третий дубль одной и тоже функции с расчетами. Что-то не правильно... Как можно задать
pdfMake.createPdf(docInfo).print('name.pdf');
Вне функции, в которой формируется var docInfo? |
Не знаю, у меня эта приблуда только в закладках браузера, реально же не использовал ни разу, ибо то, что действительно нужно когда-то готовить как PDF (презентации и прочие доки), все это готовится на сервере. Мне надо потратить немного времени, чтобы "пощупать" эту приблуду.
Ваш калькулятор, судя по данным, прост как валенок :) , неужели нельзя было результат расчета организовать как таблицу, которую распечатать то ведь не так и сложно, более того, можно даже в отдельном окне, запросив сервер, который вернет все в каком-то "шикарном шаблоне" для печати, или использовать meda print? Неужели рационально отсылать почтой какой-то файл, вместо того, чтобы отправить обычное почтовое html сообщение? Я ничего не имею против, охота пуще неволи, но когда вместо пользы геморрой, я этого не понимаю. ;) |
Цитата:
Мне просто интересно, можно ли получить данные переменной, которая задана внутри функции, извне этой самой функции. Вот в чем вопрос) Простым способом она получается НЕОПРЕДЕЛЕНА |
Разобрался...
Оказывается это делается очень просто)) Я про передачу переменной из одной функции в другую...
function changeFunc(){
var docInfo = хххххххх;
return docInfo;
}
$('#printfile').click(function() {
var docInfo = changeFunc();
pdfMake.createPdf(docInfo).print('name.pdf');
});
Теперь расчеты в одном экземпляре, все остальное отдельными функциями. |
| Часовой пояс GMT +3, время: 15:48. |