Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


hagul

Recommended Posts

Пытаюсь сгенерировать 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.