Prestashop: в счете в формате PDF используется другой шрифт в зависимости от языка (французский или английский)

Используя Prestashop 1.5.5.0 для двуязычного магазина (английский/французский), я заметил, что PDF-файл, созданный для счета-фактуры, имел заметно различное представление в зависимости от того, был ли он создан на английском или французском языке.

Наиболее заметные отличия:

  • используемое семейство шрифтов в английском языке отличается: буквы заметно крупнее (особенно в нижнем регистре) и имеют разную форму; Однако я не смог определить, что это за шрифт.
  • в английском языке каждый текстовый элемент, который должен быть выделен жирным шрифтом, отображается с обычным шрифтом (тогда не жирным); я предполагаю, что семейство шрифтов, используемое в английском языке, не имеет полужирного варианта.

Вот сравнение обоих шрифтов (французский слева, английский справа):

сравнение шрифтов

На всякий случай я внес очень небольшое изменение в файл invoice.tpl (я просто добавил простую точку где-то в содержании), а затем повторно загрузил счет в формате PDF на обоих языках: изменение появилось на обоих языках. Таким образом, оба языка используют один и тот же файл TPL. Тем не менее, они не используют одно и то же семейство шрифтов.

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

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


person s427    schedule 08.12.2014    source источник
comment
Было бы лучше опубликовать примеры каждого файла PDF, гораздо более вероятно, что мы сможем сказать вам, какой шрифт используется из PDF, чем глядя на снимки экрана. Кроме того, какое приложение вы используете для просмотра файлов PDF?   -  person KenS    schedule 08.12.2014
comment
Я не хочу публиковать PDF-файл, так как он может содержать конфиденциальную информацию (это не мой сайт). Во всяком случае, я только что обнаружил, что вы можете вывести список используемых шрифтов через Acrobat, через пункт меню Файл › Свойства (вкладка Шрифты). Это действительно позволило мне решить проблему (я сразу же опубликую свой ответ), хотя это все еще своего рода взлом...   -  person s427    schedule 09.12.2014


Ответы (2)


Итак, я только что обнаружил, что вы можете получить список шрифтов, используемых в документе PDF, через сам Acrobat (меню Файл > Свойства, вкладка Шрифты).

Это позволило мне идентифицировать шрифт, используемый в английских счетах в формате PDF: DejaVuSans. Я провел поиск по этому термину во всех файлах сайта и нашел виновника в classes/pdf/PDFGenerator.php, в котором определена эта переменная:

public $font_by_lang = array(
    'ja' => 'cid0jp',
    'bg' => 'freeserif',
    'ru' => 'freeserif',
    'uk' => 'freeserif',
    'mk' => 'freeserif',
    'el' => 'freeserif',
    'en' => 'dejavusans',
    'vn' => 'dejavusans',
    'pl' => 'dejavusans',
    'ar' => 'dejavusans',
    'fa' => 'dejavusans',
    'ur' => 'dejavusans',
    'az' => 'dejavusans',
    'ca' => 'dejavusans',
    'gl' => 'dejavusans',
    'hr' => 'dejavusans',
    'sr' => 'dejavusans',
    'si' => 'dejavusans',
    'cs' => 'dejavusans',
    'sk' => 'dejavusans',
    'ka' => 'dejavusans',
    'he' => 'dejavusans',
    'lo' => 'dejavusans',
    'lv' => 'dejavusans',
    'tr' => 'dejavusans',
    'ko' => 'cid0kr',
    'zh' => 'cid0cs',
    'tw' => 'cid0cs',
    'th' => 'freeserif'
    );

Отключение (комментирование) строки 'en' => 'dejavusans', действительно решило проблему.

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

person s427    schedule 09.12.2014
comment
1/ -- KenS попросил вас в самом первом комментарии предоставить образец PDF. Вы этого не сделали, так что более точных ответов вы не получите, а, скорее всего, какие-то спекулятивные размышления (если вообще будут). Во французском языке с большим количеством символов с акцентом обычно используется другой набор символов, чем в английском (без акцентов). Следовательно, когда-то в далеком прошлом разработчик мог решить не поддерживать французский язык, потому что он не знал, как обрабатывать символы с диакритическими знаками. -- (продолжение) - person Kurt Pfeifle; 09.12.2014
comment
2/ -- Возможно, шрифт, используемый сейчас для французского языка, является шрифтом по умолчанию, и, возможно, он не встроен в PDF, и поэтому современные средства просмотра PDF будут использовать какой-то замещающий шрифт для невстроенного (разный в каждой системе, в которой вы открываете файл, и, возможно, разный для каждого принтера, на котором вы его печатаете....) - person Kurt Pfeifle; 09.12.2014
comment
Да ладно... KenS попросил образец PDF, чтобы помочь определить, какой шрифт в нем использовался. Теперь на этот вопрос ответило другое средство (это DejaVuSans). Таким образом, загрузка образца PDF никак не поможет понять причины, лежащие в основе этого конкретного фрагмента программирования PHP в коде Prestashop. Тем не менее, спасибо за ваши мысли по теме. - person s427; 09.12.2014
comment
(1) С самого начала было неясно, что вы спрашиваете об этом конкретном аспекте программирования на PHP. -- (2) Вы спросили конкретно о шрифтах, используемых в двух PDF-файлах. -- (3) За проблемой может скрываться нечто большее, чем вы можете себе представить (исходя из вашего *очень ограниченного понимания PDF и программного обеспечения PDF, которое у вас есть до сих пор). -- В любом случае, я рад, что вы нашли хакерский обходной путь. Может быть, вы будете искать правильное решение позже. Затем спросите еще раз, если хотите. - person Kurt Pfeifle; 09.12.2014
comment
Кроме того, около 17 часов назад KenS запросил образец PDF (который можно было бы легко создать без включения в него конфиденциальной информации). Ваше решение пришло 2 часа назад... - person Kurt Pfeifle; 09.12.2014

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

Вы можете с (почти) абсолютной уверенностью определить, какие шрифты используются в PDF-файлах обоих типов самим. Просто запустите эту команду:

pdffonts -f 1 -l 5 pdffile.pdf

(Это показывает вам все шрифты, используемые со страницы 1 до страницы 5 PDF, если вас не интересуют другие страницы...)

Если вы получаете no для обоих столбцов, emb, а также sub, то шрифт не встроен в PDF, и ваше средство просмотра PDF может использовать любой подходящий шрифт-заменитель, который он сочтет подходящим.

pdffonts доступен для Linux, Unix, Mac OSX и Windows.

person Kurt Pfeifle    schedule 08.12.2014
comment
Спасибо за совет. Я попробую это. - person s427; 09.12.2014
comment
На самом деле все еще проще: в Acrobat можно просто воспользоваться пунктом меню Файл › Свойства и перейти на вкладку Шрифты. Я этого не знал. ^^ - person s427; 09.12.2014
comment
@s427: На самом деле, по моему мнению, это не проще. И это работает только в Acrobat. И это работает только на платформах, где установлен Acrobat. И это не дает вам возможности увидеть результат на постраничной основе. И это не говорит вам так много подробностей о шрифтах. Кроме того, он содержит некоторую запутанную информацию. (Или вы действительно понимаете, что именно означает, если запись в этом списке озаглавлена ​​Helvetica, а затем ниже написано: Actual font: Arial ?? ) - person Kurt Pfeifle; 09.12.2014
comment
Я согласен со всем, что вы сказали, но правда в том, что мне потребовалось 15 секунд, это дало мне информацию, которую я смог использовать. Мне не пришлось ничего искать, устанавливать, настраивать или изучать. Мне кажется действительно проще. ;) - person s427; 09.12.2014
comment
Я обычно голосую за полезные ответы, и я ценю, что вы нашли время, чтобы помочь мне. Ваш совет фактически поставил меня на путь поиска решения. Сегодня утром на работе было немного суматошно, и я не проголосовал за ваш ответ. - person s427; 09.12.2014