Перейти к содержимому


Конвертация html в pdf до отправки sendmail


Сообщений в теме: 24

#1 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 02 Апрель 2017 - 17:33

А никто не знает, нет ли встроенной функции конвертации html в pdf до отправки sendmail?

#2 maksn

    Активный участник

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 02 Апрель 2017 - 23:28

Просмотр сообщенияАлександр Пономарев (02 Апрель 2017 - 17:33) писал:

А никто не знает, нет ли встроенной функции конвертации html в pdf до отправки sendmail?
Есть встроенный класс mpdf. Его и используйте
"...Сижу, паяю. CRM починяю..."
Мои разработки

#3 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 09:13

Total HTML Converter X идеально подходит для установки на веб-серверах, использования из сервисов, запуска из других программ при помощи командной строки.
Эта простая в использовании утилита (X означает eXtended) преобразует файлы HTML в DOC, XLS, PDF, JPG или Text даже на веб-сервере, в отличие от обычного Total HTML Converter. Принцип работы программы такой же, как и у остальных продуктов - самым сложным является определение Вами нужного формата конечных файлов преобразования HTML. Вы просто выбираете файлы и конечный формат, затем жмете Ok. Total HTML Converter X сделает все остальное!

С Total HTML Converter X Вы также можете преобразовывать множество файлов одновременно, если имеете дело с их большим количеством. Некоторые предпочитают использовать программу при помощи командной строки, находя это более удобным. Используйте Total HTML Converter X для быстрого и легкого конвертирования своих HTML файлов!


Может его попросить встроить в КБ?


#4 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 09:16

А mpdf предустановлен в КБ? Как его подключить корректно? Нет ли примера кода для вывода содержимого переменной $html, хранящей код страницы в html в pdf и отправки приложением по почте?
Как-то ведь скрипт подключить сначала надо? Или просто повесить во внешних файлах, если встроенного нет?

include("mpdf.php");
//Кодировка | Формат | Размер шрифта | Шрифт
//Отступы: слева | справа | сверху | снизу | шапка | подвал
$mpdf = new mPDF('utf-8', 'A4', '10', 'Arial', 0, 0, 5, 5, 5, 5);
$mpdf->charset_in = 'utf-8';

$stylesheet = 'table {
                    text-align: center;
                    width: 320px;
                    color: #ff44ee;
                    margin: 0;
                    float: left;
               }
               td {
                    width: 80px;
               }';

//Записываем стили
$mpdf->WriteHTML($stylesheet, 1);
$mpdf->list_indent_first_level = 0;
//Записываем html
$mpdf->WriteHTML($html, 2);
$mpdf->Output('mpdf.pdf', 'I');

Сообщение отредактировал Александр Пономарев: 03 Апрель 2017 - 09:32


#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Апрель 2017 - 09:45

Цитата

Может его попросить встроить в КБ?

Это серверная утилита, ее нельзя встроить в программу. В КБ можно встроить только PHP библиотеку или класс.

Цитата

А mpdf предустановлен в КБ?

Да, в include\mpdf

Пример использования вы уже сами выложили.

#6 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 10:00

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

Вы ответы пишете быстрее, чем я вопросы задаю :-)

Пошел копать дальше. Кстати, а нельзя ли где-нибудь выложить классы и их описания, которые вы уже ипользуете и как их подключать?

Сообщение отредактировал Александр Пономарев: 03 Апрель 2017 - 10:02


#7 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 10:02

Просмотр сообщенияCbCoder (03 Апрель 2017 - 09:45) писал:

Это серверная утилита, ее нельзя встроить в программу. В КБ можно встроить только PHP библиотеку или класс.



Да, в include\mpdf

Пример использования вы уже сами выложили.

Вы отвечаете быстрее, чем я спрашиваю :-)

Сообщение отредактировал Александр Пономарев: 03 Апрель 2017 - 10:03


#8 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 10:38

Не пойму, что я делаю не так?

require_once "include/mpdf/mpdf.php";
//Кодировка | Формат | Размер шрифта | Шрифт
//Отступы: слева | справа | сверху | снизу | шапка | подвал
$mpdf = new mPDF('utf-8', 'A4', '10', 'Arial', 0, 0, 5, 5, 5, 5);
$mpdf->charset_in = 'utf-8';

$stylesheet = 'table {
text-align: center;
width: 320px;
color: #ff44ee;
margin: 0;
float: left;
}
td {
width: 80px;
}';

//Записываем стили
$mpdf->WriteHTML($stylesheet, 1);
$mpdf->list_indent_first_level = 0;
//Записываем html

$mpdf->WriteHTML($html2, 2);
//$mpdf->Output('mpdf.pdf', 'I');
// /pdf
$file['name'] = "schet.pdf";
$file['disp'] = "attachment";
$file['type'] = "text/html";
$file['content'] = $mpdf;
$attach_files[] = $file;
$out=sendmail("Счет № ".$nom." от ".$data." на ".$summ_it." рублей",$html2,$mail_adres,$adr_otpr,"РИФИНИТУРА","","text/html","utf-8","",$attach_files,-1,1,0,0);

У меня подозрения на строки
$file['type'] = "text/html"; - может быть тут надо pdf указывать?
и самое большое на строку
$file['content'] = $mpdf;
Я так понимаю, что там нужно как-то по другому передавать в переменную содержимое pdf файла?
Хотя $mpdf->Output('mpdf.pdf', 'I'); - это же просто вывод этого содержимого на экран, верно?
Возможно, там есть какой-то иной метод для присвоения переменной? Какой?

#9 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Апрель 2017 - 10:52

Цитата

$file['type'] = "text/html"; - может быть тут надо pdf указывать?

Да, разумеется, "application/pdf".

Цитата

Хотя $mpdf->Output('mpdf.pdf', 'I'); - это же просто вывод этого содержимого на экран, верно?
Возможно, там есть какой-то иной метод для присвоения переменной? Какой?

Да, вам нужен не вывод на экран, а вывод бинарного потока, который можно засунуть в переменную, для этого задается 'S' вместо 'I':

$file['content'] = $mpdf->Output('mpdf.pdf', 'S');


#10 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 10:58

Кстати, нет ли версии поновее, чтобы понимала html5 и CSS3? Эта выводит на странице тег <STYLE> и его содержимое вместо форматирования страницы.

#11 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 12:45

А картинки в теле HTML она не конвертит что ли?

#12 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 13:02

Или только внешние не конвертит, поскольку не вставляет в HTML? Их сначала в базе надо сохранить?

#13 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Апрель 2017 - 17:12

Скорее всего конвертит только картинки с локальными путями. Если там php скрипт их формирует - то работать не будет, проверено. В КБ из-за этого они вначале в кэш сохраняются перед конвертацией.


Цитата

Их сначала в базе надо сохранить?

Не в базе, а в локальной папке, например в том же cache, как уже сказал.

#14 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 17:47

Не получилось отправить pdf почему-то.

require_once "include/mpdf/mpdf.php";
$mpdf = new mPDF('utf-8', 'A4', '10', 'Arial', 0, 0, 5, 5, 5, 5);
            $mpdf->charset_in = 'utf-8';
            $stylesheet = 'table {
                text-align: center;
                width: 100%;
                color: black;
                margin: 0;
                float: left;
                font-size:12pt;
            }
            td {
                margin:0 px; text-align:left;
            }
            div {margin:0px; padding:0px;}
                .tk {border:1px solid black; padding:3pt;}
            ';
$mpdf->WriteHTML($stylesheet, 1);
$mpdf->list_indent_first_level = 0;
$mpdf->WriteHTML($html2, 2);
$n_f="Счет № ".$nom.".pdf";

$mail_adres=mf_par_kli($kli,5);
$adr_otpr=mf_user_mail($uID); // Адрес текущего менеджера

$postHTML=$mpdf->Output($n_f, 'S'); 
$file="";
$file['name'] = $n_f;
$file['disp'] = "attachment";
$file['type'] = "application/pdf";
$file['content'] = $postHTML;
$attach_files=$file;

$subject="Счет № ".$nom;
$message="Счет в формате pdf находится во вложении";
$out=sendmail($subject,$message,$mail_adres,$adr_otpr,"РИФИНИТУРА",$adr_otpr,"application/pdf","utf-8","",$attach_files,-1,1,0,0);
$mpdf->Output($n_f, 'I');




Письмо приходит без вложения, а экран зависает. Смущают меня application/pdf в двух местах. Может надо только в одном указывать этот тип? в file?

Сообщение отредактировал Александр Пономарев: 03 Апрель 2017 - 17:57


#15 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 03 Апрель 2017 - 18:03

Просмотр сообщенияCbCoder (03 Апрель 2017 - 17:12) писал:

Скорее всего конвертит только картинки с локальными путями. Если там php скрипт их формирует - то работать не будет, проверено. В КБ из-за этого они вначале в кэш сохраняются перед конвертацией.

Не в базе, а в локальной папке, например в том же cache, как уже сказал.
Дело в том, что я для эксперимента вставил туда изображение фото из базы данных и в html она его на экран вывела, а в pdf - нет. Я подозреваю, что это изображение надо как-то в письмо добавить вложением, чтобы оно выводилось в pdf, хотя это бред по-моему - в pdf все внутри должно храниться. Ладно бы письмо было в html . Там понятное дело не картинка, а ссылка на нее и картинку нужно тоже как-то прилинковывать к письму и ссылаться на нее. Пока что темный лес для меня, но я освою со временем.

Можно на основе моего кода показать, как правильно добавлять печать и подпись на документ, который потом отсылать в pdf на почту клиенту. Думаю, этот пример многим бы помог на этом форуме.

Сообщение отредактировал Александр Пономарев: 03 Апрель 2017 - 18:05


#16 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 04 Апрель 2017 - 12:28

Цитата

Смущают меня application/pdf в двух местах. Может надо только в одном указывать этот тип? в file?

Указывать надо там где тип соответствует. Если у вас во вложении файл pdf - то именно во вложении и должен быть тип pdf. А само письмо не может быть с типом pdf - оно либо в html, либо в plain text.

Цитата

Дело в том, что я для эксперимента вставил туда изображение фото из базы данных и в html она его на экран вывела, а в pdf - нет.

Из базы данных картинка вставляется через php скрипт. Я уже написал выше, что pdf таки картинки не конвертит, несмотря на то что в html они отображаются. И там же предложил решение - сохранять картинку в cache и ссылаться в коде на cache. Или вы не читаете мои сообщения?

#17 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 04 Апрель 2017 - 17:24

Просмотр сообщенияCbCoder (04 Апрель 2017 - 12:28) писал:

Указывать надо там где тип соответствует. Если у вас во вложении файл pdf - то именно во вложении и должен быть тип pdf. А само письмо не может быть с типом pdf - оно либо в html, либо в plain text.



Из базы данных картинка вставляется через php скрипт. Я уже написал выше, что pdf таки картинки не конвертит, несмотря на то что в html они отображаются. И там же предложил решение - сохранять картинку в cache и ссылаться в коде на cache. Или вы не читаете мои сообщения?

Читаю. Но я хоть и сильно продвинулся в php, пока еще только учусь в узких вопросах, которые редко встречаются. С учетом того, что форум читают и совсем начинающие, было бы неплохо для них приводить примеры кода. Например, как именно сохранить в кэше картинку, чтобы она попала в pdf на том месте, где ей положено быть в соответствии с html разметкой. Вы думаете я так часто работаю с кэшем и изображениями в нем, как вы? Мне сейчас надо перекопать кучу инфы и всем, кто идет следом тоже. Не проще бы было просто выставить здесь мой код с доработками, чтобы он заработал? И все потом будут просто делать копи-пасте и не будут доставать вас вопросами.

#18 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 04 Апрель 2017 - 17:26

И вообще стоит завести в форуме отдельный раздел "Фрагменты кода", куда помещать готовые работающие фрагменты с пояснениями уже после их обсасывания в форуме.

#19 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 04 Апрель 2017 - 21:31

Ну так поможете или нет?

#20 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 05 Апрель 2017 - 10:07

В чем проблема сохранить файл картинки в папке, не понял? И затем указать в html путь к ней? Я же не знаю в каком именно месте у вас "затык" с пониманием.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных