Автор Тема: Как запретить формирование счета на доставку в формате PDF в 1.4.5.1?  (Прочитано 2203 раз)

18 Март 2013, 01:25:55
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Как запретить формирование счета на  доставку в формате PDF в 1.4.5.1?

Нужно для многоязычного сайта формировать счета на доставку в двух кодировках CP1251 и CP1257.
Корректного формирования не получается!
К тексту, который отправляется через электронную почту, претензий нет!
   
18 Март 2013, 11:03:39
Ответ #1
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 102503
  • Репутация: +34219/-0
    • Просмотр профиля
Где запретить? В админке, в кабинете пользователя, в счетах?
Кому запретить? Администратору, клиенту?
18 Март 2013, 12:51:55
Ответ #2
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Cпасибо за ответ!
Уточняю ссылки  на пошаговые инструкции !

это оригинал
автор  zuzul Posted 30 November 2008 - 10:31 PM #33

это копия
автор roof  17 апреля 2012 11:41

есть еще один автор Avlad
вот что он предлагает:

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

ufpdf - это надстройка над fpdf, позволяющая работать в utf-8.

В оригинальном виде работать у меня не захотела,
пропатчил в ней следующее в 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.
.....................

я попробовал оба варианта tcpdf  и  ufpdf
вместо   букв ā č ē  ī ģ ķ ļ ņ š ū ž выводятся русские буквы  в и з о м н п т р ы ю
По-прежнему поддержка UTF8 отсутствует!
В пору вообще отказаться от вывода счета в формате PDF?
А на что заменить?
18 Март 2013, 17:00:48
Ответ #3
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
18 Март 2013, 17:51:55
Ответ #4
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
18 Март 2013, 18:03:57
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
На версии 1.5 легче работать с pdf.
На prestashop 1.4 делал поддержку русского без проблем. Пример брал отсюда
18 Март 2013, 19:09:10
Ответ #6
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо за совет!
Может при решении  поможет такое наблюдение:

у меня в настройках PDF в BackOffice
для русского  языка  выбрана таблица  CP1251, шрифт verdana 
для второго   языка выбрана  таблица  CP1257, шрифт verdana

с русским  языком при использовании таблицы  CP1251 формирование счета в формате pdf идет без  проблем
 
а вот при формировании счета на втором языке, когда должна использоваться таблица  CP1257,
как только нужно отобразить символы
 194 Ā Â Ā 226 ā â ā
199 Ē Ç Ē 231 ē ç ē
200 Č È Č 232 č è č
204 Ģ Ì Ģ 236 ģ ì ģ
205 Ķ Í Ķ 237 ķ í ķ
206 Ī Î Ī 238 ī î ī
207 Ļ Ï Ļ 239 ļ ï ļ
208 Š Ð Š 240 š ð š
210 Ņ Ò Ņ 242 ņ ò ņ
219 Ū Û Ū 251 ū û ū
222 Ž Þ Ž 254 ž þ ž
изображение берется из кодовой таблицы CP1251
например: вместо
буквы ā извлекается русская буква в
буквы Ā извлекается русская буква В

И это у большинства авторов постов, у которых многоязычные магазины на Prestashop. 

В некоторых постах заметил для правильного отображении валют применение функции
static private function convertSign($s)  -->> static private function convertSign($s)
{
        return str_replace('?', chr(165), str_replace('?', chr(163), str_replace('€', chr(128), $s)));  -->> return html_entity_decode($s,ENT_NOQUOTES,'UTF-8');
 }
Кто может прокомментировать этот код?
18 Март 2013, 21:27:22
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Цитировать
Кто может прокомментировать этот код?
Запись непонятная, а так это замена символов валюты функцией chr (возвращает символ по его коду).
static protected function convertSign($s)
{
  $arr['before'] = array('€', '£', '¥');
  $arr['after'] = array(chr(128), chr(163), chr(165));
  return Tools::iconv('utf-8',self::encoding(),str_replace($arr['before'], $arr['after'], $s));
}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
18 Март 2013, 22:01:00
Ответ #8
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Cпасибо за комментарий!

Так что, таким образом можно заменить любой символ при формировании документа?
Например, заменить символ русской  буквы А  на символ латинской буквы W?
Если это возможно, то это решение проблемы, указанной выше?
19 Март 2013, 13:01:43
Ответ #9
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 102503
  • Репутация: +34219/-0
    • Просмотр профиля
Заменить можно все.
Функция chr конвертирует целое число в символ. Возвращает строку из одного символа, код которого задан аргументом ascii.
Набор символов ansi

19 Март 2013, 17:07:19
Ответ #10
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо за ответ!

Только из Вашего поста не понятно  - эта замена в пределах выбранного набора символов?

Или можно находясь в таблице CP1251 при конвертации получить символ из таблицы CP1257?

У меня именно такой случай:
почему-то при работе /classes/pdf.php выбирается только CP1251
вероятно это после русификатора


в   настройках БО для формирования pdf заданы CP1251 и CP1257

когда pdf.php нужно произвести выбор  из  РАСШИРЕННЫХ ASCII КОДОВ
возращается строка из одного символа CP1251, соответствующая запрошенному целому числу
т.е скрипт работает правильно

но только эта не та кодовая таблица!

какой выход?
найти переменную, которая отвечает за смену на лету кодовых таблиц в файле classes/pdf.php
и управлять значением этой переменной
 
кто-нибудь изучал код classes/pdf.php?



Заменить можно все.
Функция chr конвертирует целое число в символ. Возвращает строку из одного символа, код которого задан аргументом ascii.
Набор символов ansi
19 Март 2013, 18:58:58
Ответ #11
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Цитировать
Только из Вашего поста не понятно  - эта замена в пределах выбранного набора символов?
Это не замена (для замены разных символов другие функции), это преобразование.
Цитировать
конвертирует целое число в символ.
Цитировать
Или можно находясь в таблице CP1251 при конвертации получить символ из таблицы CP1257?
Нет.
Цитировать
в   настройках БО для формирования pdf заданы CP1251 и CP1257
Как задавали? В стандарном варианте множестенный выбор запрещен.
Цитировать
найти переменную, которая отвечает за смену на лету кодовых таблиц в файле classes/pdf.php
Нет там такой функции, менять кодировку для каждого счета, сами что-то дописывали? Есть переменная для кодировки
PS_PDF_ENCODING_Значение ей присвоить можно из админки, в меню PDF назначить кодировку из списка.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
19 Март 2013, 20:17:24
Ответ #12
  • Новичок
  • *
  • Сообщений: 7
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Уважаемый коллега, mAgency!
Спасибо за понимание и Ваш второй ответ!

Может быть относительно  одноязычного магазина Вы правы!
Но у  меня  магазин работает на двух языках и все настройки сдублированы.
И у клиентов должен быть  выбор.

>>>в   настройках БО для формирования pdf заданы CP1251 и CP1257
>>>Как задавали? В стандарном варианте множестенный выбор запрещен.

посмотрите пожалуйста приложения

>>>PS_PDF_ENCODING_
>>>Значение ей присвоить можно из админки, в меню PDF назначить кодировку из списка.

А разве это значение PS_PDF_ENCODING_ не должно меняться при изменении кодировки?
Получается, что замена кодировок при выборе из выпадающего списка не происходит! 

Вот это, мне кажется и есть основнвя проблема.
19 Март 2013, 23:44:49
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +206/-0
    • Просмотр профиля
Это для одного языка нельзя несколько кодировок выбрать, а для разных можно.
У меня была похожая проблема. 2 разные кодировки для 2 языков. Когда пробывал вывести инвойс в пдф, то всегда была кодировка ср1251. Потом разобрался, что в профиле, через который я делал заказ, язык интерфейса русский и заказ на русском и если я выбираю другой язык, то все равно кодировка ср1251. Сам поменял язык заказа и тогда все стало правильно.