Итак, продолжаем разбираться с построением магазина на Virtuemart 2.0 и Joomla 2.5. На очереди веселый глюк с русскими инвойсами и pdf в Virtuemart 2.0. Дело в том, что когда происходит формирование заказа, virtuemart выставляет счет в pdf (invoice), только вот все русские буквы заменяются на знаки вопросов. Согласитесь, что это не слишком информативно для Ваших покупателей?
Сделаем маленькое отступление. Если на этапе оформления заказа Ваш Virtuemart 2.0 начинает глючить, то показывая страницу 404, то зависая, то выдавая множество ошибок, переставьте для начала пакет Virtuemart 2.0 all in one (aio), который идет в стандартной поставке с самим магазином.
Virtuemart 2.0 pdf инвойсы и русские буквы.
Итак, оказывается шрифты, которые используются для формирования счетов в самом virtuemart попросту не поддерживают кириллицу (кириллические символы). Программисты Virtuemart здесь кивают в сторону TCPDF, библиотеки, которую использует и Virtuemart для формирования pdf документов (вид для печати в pdf, virtuemart 2.0 invoce pdf и т.п.).
Итак, приведем порядок действий, как же «добавить» поддержку кириллицы в invoice pdf virtuemart 2.0.
Первое, после установки virtuemart 2.0 в папке /libraries создает подпапку /libraries/tcpdf/fonts/
Нам нужно добавить необходимые шрифты, поддерживающие кириллицу, в эту подпапку. Для этого переходим на сайт разработчиков в раздел
Перейдем теперь к изменению файлов virtuemart для добавления поддержки кириллицы в pdf invoice в virtuemart 2.0.
Открываем файл:
/components/com_virtuemart/controllers/invoice.php
Ищем следующее значение:
$pdf->setHeaderFont(Array('helvetica', '', 8));
Изменяем на:
$pdf->setHeaderFont(Array('freesans', '', 8));
Ищем значение:
$pdf->setFooterFont(Array('helvetica', '', 10));
Изменяем на:
$pdf->setFooterFont(Array('freesans', '', 10));
Ищем значение:
$pdf->SetFont('helvetica', '', 8, '', true);
Изменяем на:
$pdf->SetFont('freesans', '', 8, '', true);
Ищем значение:
$this->SetFont('helvetica', 'I', 8);
Изменяем на:
$this->SetFont('freesans', 'I', 8);
Дальше открываем файл
/components/com_virtuemart/helpers/vmpdf.php
Ищем следующее значение:
$this->setHeaderFont(Array('helvetica', '', 8));
Меняем на:
$this->setHeaderFont(Array('freesans', '', 8));
Ищем следующее значение:
$this->setFooterFont(Array('helvetica', '', 10));
Меняем на:
$this->setFooterFont(Array('freesans', '', 10));
Ищем следующее значение:
$this->SetFont('helvetica', '', 8, '', true);
Меняем на:
$this->SetFont('freesans', '', 8, '', true);
Ищем следующее значение:
$this->SetFont('helvetica', 'I', 8);
Меняем на:
$this->SetFont('freesans', 'I', 8);
Данная инструкция верна для virtuemart 2.0.16 + 2.0.18 a по замене кода в указанных файлах. Но что же делать, если код и версия вашего Virtuemart 2.0 отличаются?
Нужно сделать следующее: найти поиском по файлам рекурсивно в папках /components/com_virtuemart все строки, где встречается helvatica, и заменить их на freesans, или другой шрифт в формате tcpdf из папки /libraries/tcpdf/fonts (название шрифта в папке и будет названием шрифта для замены), поддерживающий кириллицу (русские символы). Можно также дополнительно осуществить поиск по методам самого класса tcpdf – SetFont,setHeaderFont,setFooterFont, и изменить шрифт, указанный в этих методах. А еще в этих методах Вы можете кроме начертания шрифтов изменить их размер. Для этого третьим параметром каждого метода можно передать целое число (высоту шрифта). Рекомендую для freesans увеличить на 1-2 пункта это значение по сравнению с helvatica. Шрифт будет крупнее и читабельнее. После всех изменений сделайте заказ и проверьте, как выглядит invoce в pdf.