Перейти к содержанию
hagul

Генерация квитанции для оплаты в PDF [решено]

Рекомендуемые сообщения

Пытаюсь сгенерировать PDF-файл квитанции для оплаты вместо html-версии.

Для этого юзаю библиотеку mpdf. С его помощью легко из html формировать PDF.

Проблема в том, что походу при его интеграции в опенкарт, некоторые функции у него переопределяются.

Если пишу в контроллере модуля оплаты через сбербанк - лезут у mpdf ошибки. Хотя тот же самый код, в обычном php-файле запускается без проблем.

<?php
include("/www/system/external/mpdf50/mpdf.php");
$mpdf=new mPDF('utf-8', 'A4-L');
$mpdf->SetHeader('{DATE j-m-Y}| |Квитанция для оплаты через Сбербанк');
$mpdf->SetDisplayMode('fullwidth');
$mpdf->SetAutoFont(AUTOFONT_ALL);
$html = '
  <table width="720" bordercolor="#000000" style="border:#000000 1px solid;" cellpadding="0" cellspacing="0">
  ...
  </table>';
$mpdf->WriteHTML($html);
$mpdf->debug = true;
$mpdf->Output('invoice.pdf','I');
?>

Траблы лезут у функции WriteHTML, внутри нее неправильно начинают срабатывать подфункции...

Можно ли это побороть? Как в опенкарте подразумевалось генерить пдф?

Видел, что некоторые используют tcpdf - но там убого со стилями и html.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообщем, по быстрому, проблему решил, сделал работающую генерацию PDF из HTML-кода.

Создал на сервере, в корне сайта новый файл, например, /invoice.php

Упрощенно, код такой:

<?php
include("/www/system/external/mpdf50/mpdf.php");
$mpdf=new mPDF('utf-8', 'A4-L');
$mpdf->SetDisplayMode('fullwidth');
$mpdf->SetAutoFont(AUTOFONT_ALL);
if (isset($_REQUEST['id'], $_REQUEST['PHPSESSID'])) {
	$id = $_REQUEST['id'];
	$opts = array(
	    'http' => array(
	        'method' => 'GET',
	        'header' => 'Cookie: PHPSESSID=' . $_REQUEST[PHPSESSID]
	    )
	);
	$context = stream_context_create($opts);
	if ($_REQUEST['type'] == 1) {
		$html = file_get_contents('http://' . $_SERVER['SERVER_NAME'] . '/index.php?route=payment/fl_sberbank/printpay&order_id=' . $id, 0, $context);
		$mpdf->SetHeader('Квитанция для оплаты через Сбербанк| |');
		$mpdf->SetTitle('Квитанция для оплаты через Сбербанк');
		$stylesheet = file_get_contents('http://' . $_SERVER['SERVER_NAME'] . '/files/css/pdf.css');
	}
}
else {
	$html = '<h1>Авторизуйтесь на сайте</h1>';
}
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html, 2);
$mpdf->Output('invoice.pdf','I');
exit;
?>

Т.е. со страницы заказа даем ссылку на скачивание квитанции для оплаты в PDF, ссылка: /invoice.php?id=155&type=1

Где id - идешник заявки, а type - указывает на то, что это квитанция сбербанка. Другие квитанции/счета я разделяют между собой по параметру type.

Собственно, когда запрашиваем файл /invoice.php он в свою очередь забирает содержимое документа /index.php?route=payment/fl_sberbank/printpay&order_id=155 Т.е. получает из него html-код и из него генерит PDF

Параметр 'I' в строке Output('invoice.pdf','I'), загружает файл прямо в браузер. Если же нужно загрузить документ на компьютер (закачать), нужно поменять его на 'D'.

PDF будет генерироваться только в том случае если пользователь авторизован на сайте.

Вкратце вот так.

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.