Автор Тема: В Prestashop 1.7.7.2 Квадратик вместо символа рубля в документах PDF (счета и пр  (Прочитано 572 раз)

10 Март 2021, 18:06:39
  • Фрилансер
  • *
  • Сообщений: 181
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Уважаемые специалисты, пожалуйста, проконсультируйте, как решить проблему. Она наверняка есть и у вас, т.к. присутствует в Prestashop 1.7.7.2 из коробки.
Prestashop везде четко показывает символ рубля (тот, что с черточкой), но в документах PDF  (счетах и т.п.) показывает квадратик вместо него.
В форумах пишу, что проблема в том, что шрифты, используемые в Prestashop 1.7 и 1.6, и обрабатываемые файлом: \classes\pdf\PDFGenerator.php и библиотекой \vendor\tecnickcom\tcpdf\ не содержат этого символа. И что надо добавить шрифт с кириллицей + latin-extended, т.к. только расширенная латиница содержит этот символ. 

Сделал так:
1. Выбрал шрифт Roboto - все начертания + cyrillic + latin-extended вот здесь:
https://google-webfonts-helper.herokuapp.com/fonts/roboto?subsets=cyrillic,latin,latin-ext

2. Скачал файл и сконвертировал этим сервисом в формат для tcpdf
https://www.xml-convert.com/en/convert-tff-font-to-afm-pfa-fpdf-tcpdf

3. Создал, соответственно, два файла для tcpdf: roboto.z и roboto.php
Скопировал их в \vendor\tecnickcom\tcpdf\fonts\

4. Скорректировал (заменил) строчку 43 в \classes\pdf\PDFGenerator.php для русского языка:
'ru' => 'freeserif',на
'ru' => 'roboto',
5. Очистил все кэши.

Но у меня не сработало. Квадратик остался. Причины возможные две:
1. При конвертации ttf в формат txpdf у меня быстро на заднем фоне мелькал экран - возможно с ошибками. Итоговые файлы все же создал, но неуверенность, что при конвертации все же была ошибка остается.
2. Неправильно прописал строки в \classes\pdf\PDFGenerator.php и, соответственно, в \vendor\tecnickcom\tcpdf\fonts\roboto.php

Не могли бы вы выложить правильные файлы (для tcpdf и DFGenerator.php) здесь и объяснить, где ошибка была в моих действиях.
10 Март 2021, 20:51:37
Ответ #1
  • Фрилансер
  • *
  • Сообщений: 176
  • Репутация: +0/-0
    • Просмотр профиля
10 Март 2021, 21:07:46
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 181
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Для pdf счетов шрифты в файлах pdfa....

Сорри, я новичок. Не понял ответа. Это где?
10 Март 2021, 21:08:12
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля

2. Скачал файл и сконвертировал этим сервисом в формат для tcpdf
https://www.xml-convert.com/en/convert-tff-font-to-afm-pfa-fpdf-tcpdf

Не могли бы вы выложить правильные файлы (для tcpdf и DFGenerator.php) здесь и объяснить, где ошибка была в моих действиях.
Ошибка в п2
В prestashop для этого есть /vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php
Примеры как пользоваться в convert_fonts_examples.txt
10 Март 2021, 21:13:37
Ответ #4
  • Фрилансер
  • *
  • Сообщений: 181
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ошибка в п2
В prestashop для этого есть /vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php
Примеры как пользоваться в convert_fonts_examples.txt

Спасибо за ответ! Видел такой подход, но ни черта не разобрался с тем, как это запускать, т.к. не очень силен в таких вещах. Работаю на локальном сервере. Где эту команду вводить непонятно. Сорри - не программист.
10 Март 2021, 21:26:20
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Шрифт закачиваете в папку /vendor/tecnickcom/tcpdf/tools/roboto.ttf
В терминале переходите в директорию /vendor/tecnickcom/tcpdf/tools/ в командной строке вводите
./tcpdf_addfont.php -b -t TrueTypeUnicode -i roboto.ttfВ /classes/pdf/PDFGenerator.php меняете шрифт (что вы уже сделали).
Получаете вот такой счет
10 Март 2021, 21:31:45
Ответ #6
  • Фрилансер
  • *
  • Сообщений: 181
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
13 Март 2021, 13:22:38
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Лучше переопределить класс PDFGenerator.php
/override/classes/PDF/PDFGenerator.php
class PDFGenerator extends PDFGeneratorCore {
    public function __construct($use_cache = false, $orientation = 'P'){
        // Override the font for your language
        $this->font_by_lang['ru'] = 'roboto';
        parent::__construct($use_cache, $orientation);
    }
}
13 Март 2021, 13:28:29
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 181
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля