Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


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.

Link to post
Share on other sites

Вообщем, по быстрому, проблему решил, сделал работающую генерацию 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
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.