Jump to content

[РЕШЕНА] [lang] Проблема с генерацией PDF


Recommended Posts

Кракозяблики генерятся в ПДФке (( Кто-нить победил? (1.0 RC5)

Пробовал следовать совету который описан тут:
http://www.prestashop.com/forums/viewthread/3161/

Но ничего не вышло. Сгенеренный Arial также кракозябликами пишется. (все проделывал для кодировки cp-1251)

Link to comment
Share on other sites

http://www.muerto.ru/utility/fontsFPDF/ Качайте Verdana
Распакуйте и закиньте в /tools/fpdf/font (можно закинуть только verdana.php, verdana.z, verdanab.php, verdanab.z). Поправьте код PDF.php так как было указано в упоминаемом Вами посте. Должно заработать. По крайней мере у меня заработало.
Link to comment
Share on other sites

выложил Verdan'у

поправил classes/PDF.php таким образом что фунция PDF теперь выглядит так:

       function PDF($orientation='P', $unit='mm', $format='A4')
       {
               global $cookie;

               if (!isset($cookie) OR !is_object($cookie))
                       $cookie->id_lang = intval(Configuration::get('PS_LANG_DEFAULT'));
                       $lang=strtoupper($lang);
                               self::$_pdfparams[$lang] = array('encoding' => $conf['PS_PDF_ENCODING'],
                                                               'font' => $conf['PS_PDF_FONT']);

                               FPDF::FPDF($orientation, $unit, $format);

                               $font = self::embedfont();
                               if($font) {
                               $this->AddFont($font);
                               $this->AddFont($font, 'B');
                                            }
       }



В админке в настройках PDF потавил cp1251 и выбрал verdana.
PDF стал генерится, но вместо русских букв пустота.

Link to comment
Share on other sites

Может еще в систему надо куда выложить эти шрифты? Я не знаю где в линуксах обычно они лежат и как их активировать..

нет, не надо
Link to comment
Share on other sites

и вообще теперь какие бы настройки не выставлялись для ПДФ - пофик, всегда испльзуется Гельветика (скриншот)

mazvv можете выложить сюда свои файлы которые вы правили? Может я че не так накосячил? или вы еще где поправили и забыли совсем..

Спасибо заранее!

1277_ARJkBsR7TofAvMg9UOlV_t

Link to comment
Share on other sites

Попробуйте заменить

   function PDF($orientation='P', $unit='mm', $format='A4')
   {
       global $cookie;

       if (!isset($cookie) OR !is_object($cookie))
           $cookie->id_lang = intval(Configuration::get('PS_LANG_DEFAULT'));
       $lang = strtoupper(Language::getIsoById($cookie->id_lang));
       $conf = Configuration::getMultiple(array('PS_PDF_ENCODING_'.$lang, 'PS_PDF_FONT_'.$lang));
       $conf['PS_PDF_ENCODING'] = (isset($conf['PS_PDF_ENCODING_'.$lang]) AND $conf['PS_PDF_ENCODING_'.$lang] == true) ? $conf['PS_PDF_ENCODING_'.$lang] : 'iso-8859-1';
       $conf['PS_PDF_FONT'] = (isset($conf['PS_PDF_FONT_'.$lang]) AND $conf['PS_PDF_FONT_'.$lang] == true) ? $conf['PS_PDF_FONT_'.$lang] : 'Arial';
       self::$_pdfparams[$lang] = array('encoding' => $conf['PS_PDF_ENCODING'],
                                       'font' => $conf['PS_PDF_FONT']);
       FPDF::FPDF($orientation, $unit, $format);
       $font = self::embedfont();
           if($font) {
                   $this->AddFont($font);
                   $this->AddFont($font, 'B');
               }        

   }

Link to comment
Share on other sites

Попробую, спасибо! Отпишусь о результатах.

Кстати вот что мне ответил один из тех кто принимал участие (я так понял) в разработке модуля котрый за генерацию ПДФ отвечает.


Hi,

I have not worked on PrestaShop for a long time. I don’t know how PDF generation works in last versions. May be I will find some time to take a look at it this weekend.

Generally, you must have the font installed in your OS (Windows, Linux) before you generate the embeded font files for PrestaShop. Are you sure that your font crr… works well with cyrillic on your OS? I am using windows and I am not familiar with linux fonts.

Regards,
Zhivko


Из его слов понятно что шрифт еще обязательно должен быть установлен в системе.
Link to comment
Share on other sites

Итак, чистая установка версии 1.0 RC5:

1) правим PDF.php таким образом как вы написали и больши НИЧЕГО не трогаем
2) кладем Verdan'у в нужное место
3) изменяем настройки ПДФ в админке cp1251 - verdana

в итоге имеем

FPDF error: Undefined font: verdana B



эта ошибка исчезает если вместо

$lang = strtoupper(Language::getIsoById($cookie->id_lang));


писать

$lang=strtoupper($lang);



но тогда по прежнему ничего что должно быть русскими буквами в ПДФ не отображается.

Link to comment
Share on other sites

У меня работает если внести изменения которые выше и закачать шрифты(verdana).
А ну и поставить в настройках PDF кодировку и шрифт.

FPDF error: Undefined font: verdana B


Эта ошибка выскакивает тогда, когда нет файлов verdana.z и verdanab.z (с расширением .z)

Вот архив со шрифтом который нужно залить скачать

Link to comment
Share on other sites

Все получилось. )) Ура.

Дело в том что я пробовал работоспособность на уже сгенеренных счетах, а они со старыми параметрами, поэтому выскакивала ошибка. Сделал новую покупку и все сгенерилось как надо!

Огромное всем спасибо!

Link to comment
Share on other sites

  • 3 weeks later...
  • 3 weeks later...

Хочу проверить, так ли я все делаю для правильного отображения кирилицы в PDF.



1. скачал PDF_VERDANA.rar
(http://stream.ifolder.ru/7599538,
который был выложен nobody78)


2. залил
verdana.z
verdanab.z
verdana.php
verdanab.php

в /tools/fpdf/font

3. Проверил PDF.php на соответствие наличия всех исправлений согласно постов форума, сделал 1 замену:

заменил

$lang = strtoupper(Language::getIsoById($cookie->id_lang));



на

$lang=strtoupper($lang);



4. залил
PDF.php

в /classes/PDF.php


5. В бекофисе в [Preferences - PDF]
выставил

Encoding: - cp1251
Font: verdana

6. Сделал новый заказ, опять те же иероглифы.

Link to comment
Share on other sites

  • 1 month later...

Проделал те же действия, что и Stroller - с тем же результатом. Presta 1.0.0.8, все остальное врроде бы точно такое же как в описании в теме.

Возможно для 1.0.0.8 надо как-то по-другому фиксить ?

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

У меня просто не выводятся никакие русские символы - только латинские.

Link to comment
Share on other sites

На самом деле такая проблема есть!
у меня тоже версия 1-0-0-8, может уже французам писать?

На самом деле сделал всё как сказано в постах!
не работает и всё тут!

И к тому же такой баг обнаружился!
в ПДФ файле всегда стоит валюта Евро! не смотря на то что по умолчанию идёт руб или доллар!
при этом сумма та же, а валюта евро! блин ржач!

Кто поможет вылечиться?

p.s. я тут грешным делом подумал, может дело в сравнении базы данных! я когда устонавливал Престу, созал базу в сравнении utf8_unicode_ci
знающие люди подскажите плиз!

Link to comment
Share on other sites

Поскольку от французов толку ноль, новых версий и багфиксов пока не ожидается - пришлось разбираться самостоятельно. В моем случае задача усложняется тем, что мне нужны инвойсы не только на русском, а и в CP1257. А как известно, эти кодировки между собой не совместимы.

В общем, я проинсталировал ufpdf, сделал фонты для него, пофиксил его самого и переписал pdf.php на работу с utf-8. В результате все заработало - теперь инвойсы нормально печатаются в utf-8 в любой кодировке.

  • Like 1
Link to comment
Share on other sites

теперь инвойсы нормально печатаются в utf-8 в любой кодировке.


Привет!
Можно ли поподробнее с этого момента :-) ?
Что и где нужно поменять? Можете выложить файлы с иправлениями?
Link to comment
Share on other sites

Да да! коли начал давай по пунктам что делать и кто виноват!
Хотя бы расскажи последовательность, где брать и что с этим делать!
что такое ufpdf, как делать для него фонты и фиксить? и что менять в пдф.пхп?
Очень поможешь!

Пока что я понял:
1. любой шрифт TTF(true type) кот. мы пользуем в винде можно превести в FPDF либо скачав скрипт UFPDF либо просто сделать это на сайте http://fpdf.fruit-lab.de/
2. кладём все эти адаптированые шрифты в папку \tools\fpdf\font
3. После этого эти шрифты доступны в бэке Back Office >> Preferences >> PDF

ЧТО ДЕЛАТЬ С ФАЙЛОМ PDF.php (\classes), что бы всё заработало????
Всё пробовал не получается!!!!

Link to comment
Share on other sites

Не совсем так.

ufpdf - это надстройка над fpdf, позволяющая работать в utf-8. Берется на http://acko.net/node/56
В оригинальном виде работать у меня не захотела, пропатчил в ней следующее в function AddFont:

//  if(defined('FPDF_FONTPATH')) 
//    $file=FPDF_FONTPATH.$file; 
 if(!defined('FPDF_FONTPATH')) 
   $this->_getfontpath(); 
   $file=FPDF_FONTPATH.$file; 


Кладем ufpdf.php рядом с fpdf.php - в tools/fpdf

Далее занимаемся генерацией шрифтов для ufpdf в соответствии с readme к ней. Шрифты этой надстройке нужны другие - в UTF-8, и шрифты для fpdf не подойдут. Процесс генерации шрифтов проходит в 3 этапа. Сперва берем желаемые .ttf шрифты, содержащие весь нужный нам набор символов.

1) Генерируем метрику .ufm при помощи программки ttf2ufm
$ ttf2ufm -a -F myfont.ttf
2) Запускаем makefontuni.php с аргументами .ttf и .ufm :
$ php -q makefontuni.php myfont.ttf myfont.ufm
3) Результирующие .php, .z и .ctg.z копируем в tools/fpdf/font

Теперь нужно переделать модуль pdf.php, чтобы он больше не конвертировал utf-8 в какую-либо другую кодировку, а отдавал непосредственно utf-8.

Для начала вызываем ufpdf вместо fpdf:

require(_PS_FPDF_PATH_.'ufpdf.php');

class PDF extends UFPDF



Далее я выбрал фонт verdana и вписал так:

       private static $_pdfparams = array(
              'CS' => array(
                      'encoding' => 'utf-8',
                      'font' => 'verdana')



Затем описал используемые фонты в fpdf_core_fonts и еще в самом конце модуля заменил фонт:

    static private function fontname()
   {
               $font = self::embedfont();
               return $font ? $font : 'verdana';
       }



Еще нужно описать используемые фонты в fpdf.php в функции CoreFonts по образу и подобию имеющегося описания.

После всей этой процедуры presta начала нормально печатать в utf-8.

Link to comment
Share on other sites

  • 3 weeks later...
Не совсем так.

ufpdf - это надстройка над fpdf, позволяющая работать в utf-8. Берется на http://acko.net/node/56
В оригинальном виде работать у меня не захотела, пропатчил в ней следующее в function AddFont:
//  if(defined('FPDF_FONTPATH')) 
//    $file=FPDF_FONTPATH.$file; 
 if(!defined('FPDF_FONTPATH')) 
   $this->_getfontpath(); 
   $file=FPDF_FONTPATH.$file; 


Кладем ufpdf.php рядом с fpdf.php - в tools/fpdf

Далее занимаемся генерацией шрифтов для ufpdf в соответствии с readme к ней. Шрифты этой надстройке нужны другие - в UTF-8, и шрифты для fpdf не подойдут. Процесс генерации шрифтов проходит в 3 этапа. Сперва берем желаемые .ttf шрифты, содержащие весь нужный нам набор символов.

1) Генерируем метрику .ufm при помощи программки ttf2ufm
$ ttf2ufm -a -F myfont.ttf
2) Запускаем makefontuni.php с аргументами .ttf и .ufm :
$ php -q makefontuni.php myfont.ttf myfont.ufm
3) Результирующие .php, .z и .ctg.z копируем в tools/fpdf/font

Теперь нужно переделать модуль pdf.php, чтобы он больше не конвертировал utf-8 в какую-либо другую кодировку, а отдавал непосредственно utf-8.

Для начала вызываем ufpdf вместо fpdf:

require(_PS_FPDF_PATH_.'ufpdf.php');

class PDF extends UFPDF



Далее я выбрал фонт verdana и вписал так:

       private static $_pdfparams = array(
              'CS' => array(
                      'encoding' => 'utf-8',
                      'font' => 'verdana')



Затем описал используемые фонты в fpdf_core_fonts и еще в самом конце модуля заменил фонт:

    static private function fontname()
   {
               $font = self::embedfont();
               return $font ? $font : 'verdana';
       }



Еще нужно описать используемые фонты в fpdf.php в функции CoreFonts по образу и подобию имеющегося описания.

После всей этой процедуры presta начала нормально печатать в utf-8.





РАСКАЖИТЕ поподробнее НЕ ПОНЯТНО НИЧЕГО, КАК ДЛЯ ДЕБИЛОВ ПОЖАЛЙУСТА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...

Avlad - 15 October 2008 02:20 AM

3) Результирующие .php, .z и .ctg.z копируем в tools/fpdf/font


Было бы здорово если бы уважаемый Avlad поделился этими файликами

Приаттачим где-нибудь здесь? :-)

И работает ли это для Version 1.1 beta 3?
Link to comment
Share on other sites

После долгих мучений с fpdf и ufpdf, отказался от обоих и перешел на tcpdf и все заработало. After long try to get work fpdf with ufpdf I simply swith to tcpdf and all works fine.

Link to comment
Share on other sites

После долгих мучений с fpdf и ufpdf, отказался от обоих и перешел на tcpdf и все заработало. After long try to get work fpdf with ufpdf I simply swith to tcpdf and all works fine.


Можно поподробней???
Link to comment
Share on other sites

1. Скачял с http://www.sourceforge.net/projects/tcpdf дистрибутив
2. Распаковал содержимое в /tools/tcpdf/
3. Изменил в /config/config.inc.php

===
define('_PS_FPDF_PATH_',            _PS_TOOL_DIR_.'fpdf/');
на
define('_PS_TCPDF_PATH_',            _PS_TOOL_DIR_.'tcpdf/');
===


4. Изменил пути в /tools/tcpdf/tcpdf.php на:

require_once(_PS_TCPDF_PATH_.'/config/tcpdf_config.php');
require_once(_PS_TCPDF_PATH_.'/unicode_data.php');
require_once(_PS_TCPDF_PATH_.'/htmlcolors.php');
require_once(_PS_TCPDF_PATH_.'/barcodes.php');


5. Изменил в /clases/PDF.php

===
include_once(_PS_FPDF_PATH_.'fpdf.php');

class PDF extends FPDF
на
require_once(_PS_TCPDF_PATH_.'config/lang/eng.php');
include_once(_PS_TCPDF_PATH_.'tcpdf.php');

class PDF extends TCPDF
===
FPDF::FPDF($orientation, $unit, $format);
на
TCPDF::__construct($orientation, $unit, $format, true);
===
       static private function convertSign($s)
   {
       return str_replace('¥', chr(165), str_replace('£', chr(163), str_replace('€', chr(128), $s)));
   }
на
   static private function convertSign($s)
   {
       return html_entity_decode($s,ENT_NOQUOTES,'UTF-8');
   }
===
$this->MultiCell($w[++$i], 5, Tools::iconv('utf-8', self::encoding(), $product['product_name']), 'B');
на
$this->MultiCell($w[++$i], 5, Tools::iconv('utf-8', self::encoding(), $product['product_name']), 'B','L');
===
return $font ? $font : 'Arial';
на
return $font ? $font : 'dejavusanscondensed';


===

6. Изменил в /admin/tabs/AdminPDF.php

===
$fontFiles = scandir(_PS_FPDF_PATH_.'font');
$encodingFiles = scandir(_PS_FPDF_PATH_.'font/makefont');
на
$fontFiles = scandir(_PS_TCPDF_PATH_.'fonts');
$encodingFiles = scandir(_PS_TCPDF_PATH_.'fonts/utils/enc');
===


7. Зашел через BackOffice/Настройки/PDF и выбрал шрифт 'dejavusanscondensed' (можете выбрать любой который вам больше понравится)

Вот вроде и все. ;)
Кстати tcpdf умеет печатать HTML в PDF с сохранением форматирования. Т.е. можно например сделать выдачу счета клиенту на выбор - в HTML или PDF.
Странно почему tcpdf не используется по умолчанию в prestashop.

P.s.: все публикуемые мной исправления делаются на SVN версии PrestaShop!

Link to comment
Share on other sites

Насчет tcpdf:
Пробую на 1.0 - в админке все выбирается, но сами счета не отображаются. Клиент после оформления заказа видит только левый и верхний блоки страницы, вместо центрального блока отображается сумма одного из товаров, например: 171.00.
Если в профиле клиента нажать на иконку PDF последнего заказа, открывается пустое окно (http://www.имя_сайта/pdf-invoice.php?id_order=7).
В списке заказов из админки ситуация та же - пустое окно.
В чем может быть проблема? Права на файлы вроде проставлены.
Спасибо!

Link to comment
Share on other sites

хм, сделал все по инструкции о замене на TCPDF, но при попытке генерации выдает ошибку - TCPDF error: Could not include font definition file
хотя пути прописаны правильно

Link to comment
Share on other sites

Так, поэтапно пишу, как пытался сделать (но так ничего и не вышло):
Скачал с http://www.sourceforge.net/projects/tcpdf дистрибутив под 5 php, версия 4.3.006 (на сервере установлен 5-й).
Положил в папку /tools/tcpdf.
В файле config.inc.php (/config/config.inc.php) прописал путь:

define('_PS_TCPDF_PATH_', _PS_TOOL_DIR_.'tcpdf/');


В файле tcpdf.php (/tools/tcpdf/tcpdf.php) заменил родные пути на такие же, только убрал первый слеш, т.к. он уже прописан в константе _PS_TCPDF_PATH_ (впрочем, с этим слешем результат такой же):

require_once(_PS_TCPDF_PATH_.'config/tcpdf_config.php');
require_once(_PS_TCPDF_PATH_.'unicode_data.php');
require_once(_PS_TCPDF_PATH_.'htmlcolors.php');
require_once(_PS_TCPDF_PATH_.'barcodes.php'); 


В файле PDF.php (/classes/PDF.php) заменил:

include_once(_PS_FPDF_PATH_.'fpdf.php');

class PDF extends FPDF


на:

require_once(_PS_TCPDF_PATH_.'config/lang/eng.php');
include_once(_PS_TCPDF_PATH_.'tcpdf.php');

class PDF extends TCPDF


Далее:

FPDF::FPDF($orientation, $unit, $format);


на:

TCPDF::__construct($orientation, $unit, $format, true);

- одна замена.
Далее:

static private function convertSign($s)
{
   return str_replace('¥', chr(165), str_replace('£', chr(163), str_replace('€', chr(128), $s)));
}


на:

static private function convertSign($s)
{
   return html_entity_decode($s,ENT_NOQUOTES,'UTF-8');
}


Далее:

$this->MultiCell($w[++$i], 5, Tools::iconv('utf-8', self::encoding(), $product['product_name']), 'B');


на:

$this->MultiCell($w[++$i], 5, Tools::iconv('utf-8', self::encoding(), $product['product_name']), 'B','L');

- 2 замены.
В AdminPDF.php (/admin/tabs/AdminPDF.php):
Заменил:

 $fontFiles = scandir(_PS_FPDF_PATH_.'font');
$encodingFiles = scandir(_PS_FPDF_PATH_.'font/makefont');


на:

 $fontFiles = scandir(_PS_TCPDF_PATH_.'fonts');
$encodingFiles = scandir(_PS_TCPDF_PATH_.'fonts/utils/enc');


В итоге симптомы такие же, как я описывал раньше - при попытке купить товар, указав метод оплаты "Наличными курьеру", грузятся левый и верхний блоки страницы, в центральной части отображается цена товара. Ссылка в адресной строке при этом имеет вид: имя_сайта/modules/cashondelivery/validation.php.
Подскажите, что не так делаю? Может, не та версия tcpdf? Руководство выложено как раз за день до выхода новой версии (новая версия вышла 1-го декабря и предыдущая для скачивания недоступна).
UPD: Нашел версию 4.3.005, сейчас попробую с ней...
UPD2: Не-а :)

Link to comment
Share on other sites

После долгих мучений с fpdf и ufpdf, отказался от обоих и перешел на tcpdf и все заработало. After long try to get work fpdf with ufpdf I simply swith to tcpdf and all works fine.

Спс будем пробовать, а шрифты там уже по умолчанию?
Link to comment
Share on other sites

у меня пишет 356.8500

TCPDF error: Could not include font definition file

пользую версию 1.0.0.8

вот! у мну такая же ошибка, версия тоже такая... кстати в последней замене (а конкретно в строчке "$this->MultiCell($w[++$i],") она там несколько другая...у меня там вообще не инкремент стоит...
Link to comment
Share on other sites


кстати в последней замене (а конкретно в строчке "$this->MultiCell($w[++$i],") она там несколько другая...у меня там вообще не инкремент стоит...

Да, кстати, верно, у меня тоже, только сейчас внимание обратил - у меня в этой строчке тоже вместо ++$i просто индекс массива -
MultiCell($w[0])

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Короче я уже думаю что эта проблема с pdf нерешабельная вообще!


Son Ame, у меня способ, предложенный zuzul - сработал, в отличие от первых способов, предложенных в этой ветке (хотя конечно не факт что в первом случае я делал все правильно...)

Но зато есть баг (может еще у кого?) кракозябры (по некоторым товарам) в модуле "история просмотра", причем именно в этом модуле и при чем только часть текста...



---
пока разработчик "чешется" выкладываю файлы с внесенными правками
заливаем:

AdminPDF.php - /admin/tabs/
config.inc.php - /config/
PDF/.php - /clases/
tcpdf.php - /tools/tcpdf/


---
сработало для:
------------------------
PrestaShop - 1.1.0.3
PHP Version 5.1.6

cyrillic_pdf_invoice.zip

Link to comment
Share on other sites

хм, сделал все по инструкции о замене на TCPDF, но при попытке генерации выдает ошибку - TCPDF error: Could not include font definition file
хотя пути прописаны правильно


Попробуй исправить в самом конце файла /clases/PDF.php
===
return $font ? $font : 'Arial';
на
return $font ? $font : 'dejavusanscondensed'; 
===

Link to comment
Share on other sites

  • 3 weeks later...
Насчет tcpdf:
Пробую на 1.0 - в админке все выбирается, но сами счета не отображаются. Клиент после оформления заказа видит только левый и верхний блоки страницы, вместо центрального блока отображается сумма одного из товаров, например: 171.00.
Если в профиле клиента нажать на иконку PDF последнего заказа, открывается пустое окно (http://www.имя_сайта/pdf-invoice.php?id_order=7).
В списке заказов из админки ситуация та же - пустое окно.
В чем может быть проблема? Права на файлы вроде проставлены.
Спасибо!

У меня была та же самая проблема. Оказалось, неправильно поменял пути в файле /tools/tcpdf/tcpdf.php (оставил "dirname"). Когда присмотрелся внимательнее и исправил - всё заработало.
P.S. Сервер использует UTF-8, кодировка для PDF в Prestashop - cp1251.
Link to comment
Share on other sites

  • 4 weeks later...

maybe you forgot to change in /clases/PDF.php

       static private function convertSign($s)
   {
       return str_replace('¥', chr(165), str_replace('£', chr(163), str_replace('€', chr(128), $s)));
   }


on

    static private function convertSign($s)
   {
       return html_entity_decode($s,ENT_NOQUOTES,'UTF-8');
   }

Link to comment
Share on other sites

  • 3 weeks later...

Может кто подскажет.

С PDF все хорошо по методу zuzul (кодировка нормальная), а вот страница .../modules/bankwire/validation.php загружается пустой (только левый и верхний блоки грузятся). Должна грузиться страница "Подтверждение заказа".

---- Presta 1.1.0.5 ---- TCPDF 4.5.015

Link to comment
Share on other sites

Уже много вариантов перепробовал. Пока решения нет.

Страница .../validation.php - “Подтверждения заказа” особенно нужна при оплате клиентом банковским переводом, она показывает реквизиты банковского счета.

Попробую изменить шаблон генерации PDF, чтобы реквизиты банковского счета отображались в инвойсе.

Link to comment
Share on other sites

  • 3 weeks later...
  • 4 weeks later...
  • 3 weeks later...

Ребята, а в новой альфа версии от 11 апреля этот способ уже не работает? Я обновил 1.1 финал новой альфа версией и пропала работа метода zuzul :( Теперь русский шрифт не отображается просто. Уважаемый zuzul, не могли бы вы подсказать что может служить проблемой (все изменения 32 поста zuzul'а вносил)

Link to comment
Share on other sites

  • 1 month later...

В файле PDF.php как-то некорректно работает функция encoding(); (версияPrestaShop 1.2)
Русский язык работает... Только корявенько.
Все сделал по zuzul'у :)
Сначала все как было так и осталось до тех пор пока в функции l(); не исправил:

1. в функции


return (Tools::iconv('utf-8', 'cp1251', $str));


заменил на

return ($str);


2. добавил arial.ttf (конвертится и ставится так, как описано в доках tcpdf);


Начал показывать "по-русски" (но только из файла translations/ru/pdf.php.

Из базы мускула по прежнему вопросики...)

Путем замены self::encoding(); на 'utf-8' в местах вывода в ячейки значений из мускула типа:


$pdf->Cell($width, 10, Tools::iconv('utf-8', self::encoding(), $delivery_address->firstname).' '.Tools::iconv('utf-8', self::encoding(), $delivery_address->lastname), 0, 'L');


на


$pdf->Cell($width, 10, Tools::iconv('utf-8', 'utf-8', $delivery_address->firstname).' '.Tools::iconv('utf-8', 'utf-8', $delivery_address->lastname), 0, 'L');[br]


Начал показывать Имя Фамилию по нашему.
В php не силен, но буду признателен за подсказки в какую сторону копать :)

Видимо где-то переменные $_iso $lang (или что там за язык отвечает?) привирают.

PS Я уже на БД грешил -- сервер локальный, мускул на latin1 был. Поправил на utf-8 -- те же грабли...
Где-то переменные Presta гуляют все-таки
А в PDF.php непонятно -- зачем эта encoding(); нужна?..
т.е поменял содержимое функции от скобки до скобки на
return ('utf-8');
и все с вышеуказанными изменениями -- ПО РУССКИ/ ПО ФРАНЦУЗКИ/ ПО АНГЛИЙСКИ! (вуаля!)
и знаки евро/фунт/доллар показвает (правда шрифт arial... на других непробовал -- надоело и запутался :)). Какое "небо" она должна была держать?
PPS и SVN и не SVN версия ...
  • Like 1
Link to comment
Share on other sites

  • 1 month later...

А у меня вот такая штука случилась, хотя раньше всё работало.
Когда заказ отправляешь или
когда генеришь ПДФ из истории заказов...
TCPDF ERROR: Missing or incorrect image file: /tmp/jpg_mAo5vA

Как убрать?

И вообще. нафиг поддержка пдф если не нужна, легко ли её отключить полностью?

Link to comment
Share on other sites

Version 1.2.0.8
Всё что ранее было написано не сработало и была у меня мысля что слишком глубоко копают, идёт просто переформат с utf8 на 1251 за каким фигом сами перешли на утф ну зачем вам 1251 при выборе карты кодировок нужно карту utf8 (не нашёл)и не нужно перебирать весь скрипт по винтикам.
Короче все что было я сделал но не сработало тупо влез в базу и в PS_PDF_ENCODING_RU поставил utf8 и всё прошло русские буквы вместо зловещих вопросов. :)

Link to comment
Share on other sites

  • 2 months later...

на версии 124 вариант из поста 32 не работает
\во всяком случае у меня не сработал
хотя на предыдущей воспользовалась этим же вариантом и все было в порядке
причем, "руб." пишутся русскими, а всего остального или нет или квадратики
может есть еще какие-то варианты?

Link to comment
Share on other sites

  • 2 weeks later...

Привет, помогите. Мне пожалуйста. Я то же завел себе блог блог, но не знаю как админитсратировать. Открываю интересную тему на блоге, но никто не имеет возможность запостить объяснение, а я не могу взять в толк, как настроить. У меня wordpress. Уже который день мучаюсь, подскажите, что в этой ситации делать? Или бросьте гиперссылку, плиз, на хелп той или иной ,что-ли. Вроде как я взял в толк, у меня запрещены объяснении как говорится и не могу обнаружить, где их можно для блога разрешить. Устроить постмодерацию хочу, чтоб спамом не заваливали. Помогите, хелп.

Link to comment
Share on other sites

  • 3 months later...

Я предпочитаю пользоваться официальными сборками. Поэтому я поставил 1.2.5 с этого сайта. Русифицировал через выложенный здесь файл.

Чтобы в дальнейшем было проще обновлять свою версию, я решил не использовать предложенный здесь tcpdf, а наладить коробочный fpdf.

Если нужен только русский язык в магазине, то всё делается в 3 шага:

1. Берём из этой ветки шрифты verdana и заливаем 4 файла в tools/fpdf/font.
2. Ставим в бэк-офисе кодировку PDF в 1251 и шрифт verdana.
После этого шага счета становятся на русском. Только значок валюты 'руб' отображается неправильно. В БД значок валюты хранится в поле с кодировкой UTF-8. В такой же кодировке какого-то черта вставляется в PDF-файл.
3. Правим функцию преобразования знака валюты (Sign) в нужную нам вид (в русском случае - кодировку) в файле classes/PDF.php.

Так как у меня магазин чисто русскоязычный, то я закавычил функцию, которая там была (в PHP ставятся 2 слеша вначале строки) и использовал команду iconv("UTF-8", "windows-1251", $s); для преобразования кода валюты в кодировку 1251.

    
static private function convertSign($s)
   {
                return iconv("UTF-8", "windows-1251", $s);
               //return str_replace('Âå', chr(165), str_replace('Âã', chr(163), str_replace('òÂì', chr(128), $s)));

   }



P.S.
Другой вопрос, что эти документы - левые. Будем переделывать коробочный classes/PDF.php подформат бухгалерских документов, привычных в России.

Link to comment
Share on other sites

  • 2 weeks later...
Насчет tcpdf:
Пробую на 1.0 - в админке все выбирается, но сами счета не отображаются. Клиент после оформления заказа видит только левый и верхний блоки страницы, вместо центрального блока отображается сумма одного из товаров, например: 171.00.
Если в профиле клиента нажать на иконку PDF последнего заказа, открывается пустое окно (http://www.имя_сайта/pdf-invoice.php?id_order=7).
В списке заказов из админки ситуация та же - пустое окно.
В чем может быть проблема? Права на файлы вроде проставлены.
Спасибо!



i do have the same problem with PS 1.2.5
when a client try to see the PDF invoice he get a blank screen, i did all changes and i checked it 3 times

please replay in English as i do not know Russian

any help would be greatly appreciated
Link to comment
Share on other sites

не стал заморачиваться со всякими правками файлов, тупо руб. написал на английской раскладке "py6."
в итоге везде все отлично
дешево и сердито)))))))

Link to comment
Share on other sites

  • 3 months later...

поставил престу 1.3.1.... модуль PDF совсем другой. закинул Вердану в шрифты, выбрал 1251 - и все работает СРАЗУ!!!! как приятно, вы даже не представляете...

Link to comment
Share on other sites

  • 1 month later...
  • 4 weeks later...
поставил престу 1.3.1.... модуль PDF совсем другой. закинул Вердану в шрифты, выбрал 1251 - и все работает СРАЗУ!!!! как приятно, вы даже не представляете...


Так работает если на сайте англицкая лоцализация (кот. по умолчанию). А если переключить на русскую трансляцию то те же вопросики вместо кириллицы.
Link to comment
Share on other sites

  • 3 weeks later...

Для 1.3.1 Точно работает!!! Закинул Вердану и все заработало! Verdana лежит тут http://ifolder.ru/7599538.
Кидал 4 файла кроме PDF.PHP. Зашел в back office выбрал русский язык интерфейса бэк офиса и поменял в preferences>pdf Кодировку на 1251 и шрифт Verdana соотвественно! Все работает всем спасибо! Все гениальное - просто!

Link to comment
Share on other sites

  • 1 month later...
Для 1.3.1 Точно работает!!! Закинул Вердану и все заработало! Verdana лежит тут http://ifolder.ru/7599538.
Кидал 4 файла кроме PDF.PHP. Зашел в back office выбрал русский язык интерфейса бэк офиса и поменял в preferences>pdf Кодировку на 1251 и шрифт Verdana соотвественно! Все работает всем спасибо! Все гениальное - просто!


Спасибо, теперь все стало по русски. Но осталась одна проблема. В счете вместо руб. стоит СЂ.
Подскажите пожалуйста где и что подправить.
Link to comment
Share on other sites

  • 2 weeks later...
Для 1.3.1 Точно работает!!! Закинул Вердану и все заработало! Verdana лежит тут http://ifolder.ru/7599538.
Кидал 4 файла кроме PDF.PHP. Зашел в back office выбрал русский язык интерфейса бэк офиса и поменял в preferences>pdf Кодировку на 1251 и шрифт Verdana соотвественно! Все работает всем спасибо! Все гениальное - просто!


Спасибо, теперь все стало по русски. Но осталась одна проблема. В счете вместо руб. стоит СЂ.
Подскажите пожалуйста где и что подправить.


Тоже актуально.
Link to comment
Share on other sites

  • 3 weeks later...

Мне больше понравилось решение с заменой 4 файлов и выбором cp1251 + verdana. Возникла проблема с валютами (1.3.3 final). Вот решил поделится решением (все предложенные, что нашел, не помогли). Необходимо заменить строку 945 в PDF.php

return str_replace('¥', chr(165), str_replace('£', chr(163), str_replace('€', chr(128), $s)));


на

return str_replace('ВҐ', chr(165), str_replace('ВЈ', chr(163), str_replace('€', chr(128), str_replace('РіСЂРЅ', 'грн.', $s))));


где РіСЂРЅ - карлякули, которые можно с криво сгенеренного PDF взять а 'грн.' - та строка на которую их нужно менять (это я описал для тех, кто другие валюты хочет пофиксить). А вообще это просто рекурсивная замена.. т.е. в идеале можно эту строку для всех валют сразу написать.. но мне влом столько телодвижений делать.. так что не обижайтесь :) Надеюсь поможет.

Link to comment
Share on other sites

А чего это стоит статус "решена"? В 1.3.2 ни один из способов не работает. Рубли криво отображаются.

Я же написал как проблему с рублями решать. Если что-то непонятно - переспросите, перед тем как говорить "ни один из способов не работает"
Link to comment
Share on other sites

А чего это стоит статус "решена"? В 1.3.2 ни один из способов не работает. Рубли криво отображаются.

Я же написал как проблему с рублями решать. Если что-то непонятно - переспросите, перед тем как говорить "ни один из способов не работает"


Вы написали для 1.3.3
Начнем с того, что данная строка в 1.3.2 не под номером 945.
Ну а продолжим тем, что данный метод для 1.3.2 не работает, как я и писал выше.
Link to comment
Share on other sites

А чего это стоит статус "решена"? В 1.3.2 ни один из способов не работает. Рубли криво отображаются.

Я же написал как проблему с рублями решать. Если что-то непонятно - переспросите, перед тем как говорить "ни один из способов не работает"


Вы написали для 1.3.3
Начнем с того, что данная строка в 1.3.2 не под номером 945.
Ну а продолжим тем, что данный метод для 1.3.2 не работает, как я и писал выше.


Этот фикс я прикрутил еще в 1.3.2 - работать точно должен. После обновления просто перенес фикс в новую версию PDF.php . Версию 1.3.3 я написал именно из-за номера строки, чтобы те, у кого другая версия искали подобную строку под другим номером (уже удалил старую версию движка, и не могу сказать какой там номер строки). Единственное что - для рублей нужно заменить значения в строках. Вы заменили, как я сказал, два слова в новой строке? Если вы все сделали по моей инструкции и у Вас не работает - давайте вместе разберемся почему. Если Вы не понимаете инструкцию - дайте мне криво сгенереный файл с кривой надпись "руб." и PDF.php - я сделаю это за Вас.
Link to comment
Share on other sites

Я понимаю инструкцию. Я беру из кривого пдфа эту самую надпись, вместо которой должно быть "руб." и в pdf.php меняю указанную Вами строку на новую, используя, как Вы написали, рекурсивную замену моих "символов" на рубли.

т.е. последняя функция выглядит у меня так: str_replace('мои кракозябли', 'руб.', $s))));


Как отображались кракозябли в пдфе, так и отображаются. Возможно, у меня имееются какие-то проблемы с кодировками, я сижу под mac os. Хотя раньше проблем не возникало.

Link to comment
Share on other sites

Я понимаю инструкцию. Я беру из кривого пдфа эту самую надпись, вместо которой должно быть "руб." и в pdf.php меняю указанную Вами строку на новую, используя, как Вы написали, рекурсивную замену моих "символов" на рубли.
т.е. последняя функция выглядит у меня так: str_replace('мои кракозябли', 'руб.', $s))));


Как отображались кракозябли в пдфе, так и отображаются. Возможно, у меня имееются какие-то проблемы с кодировками, я сижу под mac os. Хотя раньше проблем не возникало.


Мне слабо верится, что виновата OS. А можете дать все же отчет в PDF + PDF.php (может в при копировании крякозябликов что-то искажается - я скопирую сам и выложу обратно файл с поправкой)
Link to comment
Share on other sites

Я понимаю инструкцию. Я беру из кривого пдфа эту самую надпись, вместо которой должно быть "руб." и в pdf.php меняю указанную Вами строку на новую, используя, как Вы написали, рекурсивную замену моих "символов" на рубли.
т.е. последняя функция выглядит у меня так: str_replace('мои кракозябли', 'руб.', $s))));


Как отображались кракозябли в пдфе, так и отображаются. Возможно, у меня имееются какие-то проблемы с кодировками, я сижу под mac os. Хотя раньше проблем не возникало.


Мне слабо верится, что виновата OS. А можете дать все же отчет в PDF + PDF.php (может в при копировании крякозябликов что-то искажается - я скопирую сам и выложу обратно файл с поправкой)


Чирканите в ЛС мыло, я Вам туда отправлю. Спасибо.
Link to comment
Share on other sites

Разобрались в чем была проблема у nyxrussia. Чтобы не было подобных проблем выложил замену PDF.php сразу для двух версий 1.3.2 и 1.3.3. Deposit files Кстати теперь и руб и грн кодируются нормально..

Link to comment
Share on other sites

  • 1 month later...

What is your proposition? I think, some people don't know English (else they spoke on English branch).
P.S.
Solution - you must replace pdf.php (http://depositfiles.com/ru/files/7dvsi2i5x) from "/classes/" and copy files "verdana.php" "verdana.z" (http://ifolder.ru/7599538) to "/tools/fpdf/font/". In backoffice set font verdana (preferences>pdf) and be a happy.

Link to comment
Share on other sites

Я решил немного по-другому. Может, кому интересно. В моём решении не надо менять никакие файлы Престы

для корректной работы с русскими буквами надо создать файлы шрифта по инструкции http://www.fpdf.org/
можно создать их быстро для ttf шрифтов здесь: http://fpdf.fruit-lab.de/

в каталог tools/fpdf/font надо положить созданные .php и .z файлы

если шрифт не надо встраивать в pdf (что значительно влияет на размер файла), то надо
удалить в php файле строку:
$file=...

для корректного отображения символа euro надо в строке:
$diff=
прописать для кода 128 /Euro

делать надо сразу два шрифта - второй с жирными буквами. Название жирного файла должно быть такое же как и основного плюс буква b
(например, cour.php и courb.php)

в таблицу ps_configuration надо добавить записи для русского языка:
name='PS_PDF_FONT_RU', value='имя файла шрифта без расширения'
name='PS_PDF_ENCODING_RU', value='cp1251'
можно установить такие же значения и для английского языка

кому лень делать файлы, прилагаю их для шрифта courier

cour.zip

Link to comment
Share on other sites

  • 2 weeks later...
  • 4 weeks later...
×
×
  • Create New...