Система Orphus
[] []

среда, 14 октября 2009 г.

GLPI: Экспорт в PDF по русски

Меня (и не только меня) не мало людей спрашивают (через джаббер/мыло/блог/etc), как сделать экспорт в PDF, чтобы корректно отображались русские буквы. Решение есть и подсказал мне его уважаемый SGG, за что ему отдельное спасибо. Решение рассказал Сергей Яремчук в своем замечательном посте "Учет оборудования с OCS Inventory NG и GLPI", за что и ему отдельное спасибо. :)
Почему же я решил "перепостить" кусок вышеназванного поста? Из-за большого кол-во вопросов на эту тему, а заодно чтобы по сабжу было сразу видно, что речь идет именно об этом.

Почти цитирование из вышеназванного поста (с не большими и почти незаметными правками):
По умолчанию при экспорте в PDF вместо русских букв выводятся знаки вопросов, это происходит по двум причинам: стандартная функция экспортирует данные в кодировке ISO-8859-1, которую и поддерживает используемый по умолчаннию шрифт. Подсказка была найдена на форуме OPENNET.
Заменяем в скрипте /var/www/glpi/inc/export.function.php вызов функции utf8_decode на utf8_decode_cyr:
$ sudo perl -p -i -e 's/utf8_decode/utf8_decode_cyr/g' inc/export.function.php
$ 
И добавляем в export.function.php описание самой функции utf8_decode_cyr:
function utf8_decode_cyr($value){
return iconv("UTF-8","Windows-1251",$value);
}

Теперь шрифт. По умолчанию для экспорта используется шрифт Helvetica, его бы я и рекомендовал оставить. Если заменить шрифт другим, его имя придется править не только в двух местах файла export.function.php, но и в 2 файлах находящихся в lib/ezpdf. Поэтому шрифт лучше сконвертировать из TTF в Postscript type 1, для этого потребуется утилита ttf2pt1. Ставим ее:
$ sudo apt-get install ttf2pt1
И конвертируем шрифт:
$ ttf2pt1 -l cyrillic -A Helvetica.ttf Helvetica
Теперь копируем файлы вместо старых, не забыв подправить права:
$ sudo cp -v Helvetica* /var/www/glpi/lib/ezpdf/fonts/
`Helvetica.afm' -> `/var/www/glpi/lib/ezpdf/fonts/Helvetica.afm'
`Helvetica.t1a' -> `/var/www/glpi/lib/ezpdf/fonts/Helvetica.t1a'
`Helvetica.ttf' -> `/var/www/glpi/lib/ezpdf/fonts/Helvetica.ttf'
$ sudo chown www-data:www-data /var/www/glpi/lib/ezpdf/fonts/Helvetica.*
Вот и все :)


ЗЫЖ-1 Первый однострочник (который на перле) можно заменить на sed (лично мне так удобнее и привычнее):
$ sudo sed -i -e 's/utf8_decode/utf8_decode_cyr/g' inc/export.function.php
$ 
А если в вашем дистрибутиве sed не поддерживает опцию "-i", то можно и так (от root'а):
$ sed -e 's/utf8_decode/utf8_decode_cyr/g' inc/export.function.php > inc/export.function.php.new
$ mv inc/export.function.php.new inc/export.function.php

ЗЫЖ-2 Уже сконвертированные шрифты можно забрать тут или там.

UPD: из комментариев
В версии GLPI 0.78.5, чтобы "включить" русские PDF'ы, делаем так:
1) Копируем русские шрифты из ссылок выше в каталог /путь_к_каталогу_glpi/lib/ezpdf/fonts/
2) Меняем кодировку на CP-1251 при вызове функции decodeFromUTF8, в ./inc/search.class.php:
// так было
$out="\"".csv_clean($value)."\"".$CFG_GLPI["csv_export_delimiter"];
заменяем на
// к такому виду надо привести
$out="\"".decodeFromUtf8(csv_clean($value),'cp-1251')."\"".$CFG_GLPI["csv_export_delimiter"];
Спасибо Romero


Информация с сайта http://blog.angel2s2.ru/.

Похожие статьи

45 коммент.:

mafk комментирует... четверг, 15 октября 2009 г., 6:35:00 GMT+3

Видно мне была судьба найти эту статью. Все работает.
Качал готовые готовые шрифты по первой ссылке.
Единственное, в архиве есть файл php_Helvetica.font - в папке /var/www/glpi/lib/ezpdf/fonts/ есть только php_Helvetica.afm .
желательно его тоже заменять
( cp php_Helvetica.font /var/www/glpi/ezpdf/fonts/php_Helvetica.afm ). Иначе в pdf-файле лично у меня разъезжались буквы.

Angel 2S2 комментирует... четверг, 15 октября 2009 г., 12:18:00 GMT+3

Спасибо за ценную заметку :)
Лично я это не пробовал, т.к. мне не нужен экспорт в PDF (предпочитаю csv в OOo Calc), поэтому даже не смотрел какие файлы в этой папке :) В архиве по первой ссылке переименовал этот файл php_Helvetica.font в php_Helvetica.afm.


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

Анонимный комментирует... вторник, 27 октября 2009 г., 16:06:00 GMT+2

Открыла /var/www/glpi/inc/export.function.php
не нашла строчку sudo perl -p -i -e 's/utf8_decode/utf8_decode_cyr/g' inc/export.function.php

Angel 2S2 комментирует... вторник, 27 октября 2009 г., 16:16:00 GMT+2

OMG o_O Это шутка?

Там этой строки и не найдете, надо искать utf8_decode.

А эта строка, которую вы привели, является однострочником (проще говоря скриптом) и делает она вот что:
ищет в файле inc/export.function.php все вхождения подстроки utf8_decode и заменяет их на utf8_decode_cyr. Запускать надо из консоли находясь в каталоге /var/www/glpi (судя по вашему комменту).

Анонимный комментирует... среда, 25 ноября 2009 г., 12:38:00 GMT+2

Хотелось бы: сменить шрифт с Helvetica на что-нить удобоваримее.

Конвертирую (ttf2pt1 -l cyrillic -A Tahoma.ttf Tahoma), подкидываю (Tahoma.afm, Tahoma.t1a, Tahoma.ttf) в каталог /usr/share/glpi/lib/ezpdf/fonts В файлах /usr/share/glpi/lib/ezpdf/class.pdf.php и /usr/share/glpi/inc/export.function.php меняю Helvetica на Tahoma

НО: имею http://img163.imageshack.us/img163/7528/20091123185248.png

ЧЯДНТ?

Анонимный комментирует... четверг, 26 ноября 2009 г., 17:16:00 GMT+2

Гигантское спасибо автору!
спс за шрифты, тока я вот не понял как ты генерировал шрифт? у меня все время выпадал в warring. Ваш шрифт помог выводить pdf с нормальным русским текстом, но пользуюсь плагином print to pdf выдаёт все те же вопросики или кракозябры, есть небольшая просьба сгенерировать *.afm шрифты для times new roman обычный,times new roman курсив, times new roman жирный и жирный курсив.
если можно то отправь архивчек со шрифтами на adzerkot@ mail.ru буду благодарен!

Angel 2S2 комментирует... четверг, 26 ноября 2009 г., 17:56:00 GMT+2

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


Ответ на последний анонимный коммент:
Я не конвертировал шрифты, а взял их у Сергея Яремчука (этот пост это кусок его большого поста, о чем сказано в начале) и ему спасибы, а не мне ;)
Конвертнул, хотя не проверял, можете забрать тут, хотя мылом тоже кинул. (Странно, что утилиты ttf2pt1 нету в репозитории Ubuntu 9.10 Desktop. Пришлось ставить её на сервер (8.04) и там конвертировать)
Конвертировал точно так же как показано в примере в посте, т.е. "ttf2pt1 -l cyrillic -A times.ttf times" :)

Анонимный комментирует... пятница, 27 ноября 2009 г., 8:26:00 GMT+2

СПС, конверт шрифтов, как только проверю, выложу готовый к работе плагин print to pdf, с кодировкой справился тем же способом что указан выше. Будет абсолютно русскоязычный плагин с локализацией в том числе!

adzerkot

Анонимный комментирует... воскресенье, 13 декабря 2009 г., 13:56:00 GMT+2

а описаный способ подойдет для других языков - например для иврита?

Анонимный комментирует... четверг, 14 января 2010 г., 12:46:00 GMT+2

Уважаемые форумчане, кто-нибудь смог подружить русский язык с экспортом и сохранением из ПЛАГИНА, к примеру Print to PDF?

Angel 2S2 комментирует... четверг, 14 января 2010 г., 13:00:00 GMT+2

Уваажаемый комментатор, это не форум, это авторский блог :)
Я лично этого не делал. Да и вообщем мне не нужен экспорт в PDF и то, что тут описано взято из блога Сергея Яремчука, о чем сказано в начале этого поста. Сорри.

Анонимный комментирует... четверг, 14 января 2010 г., 13:25:00 GMT+2

Прошу прощения за неточность, но кто можут помогите плиз..

DragonaS комментирует... четверг, 21 января 2010 г., 10:44:00 GMT+2

Готовый "русскоязычный" плагин print to pdf для helpdesk GLPI
плагин с небольшим дефектом, читаем ридми файлик в архиве
http://dump.ru/file/4184704

Автор:
dragonas
adzerkot

adzerkot@mail.ru

Angel 2S2 комментирует... четверг, 21 января 2010 г., 13:28:00 GMT+2

Спасибо :)

Но лучше бы отправили его автору самого плагина, чтобы он ваши фиксы включил в след. релиз.
Отправлять лучше в виде diff патчей. Хотя и сами пофиксенные файлы тоже не помешают.

Да, и лучше бы залили куда-нить в другое место, т.к. на dump.ru: "Срок хранения закачанного файла составляет 30 дней с момента последнего обращения к данному файлу, затем файл удаляется автоматически."

Анонимный комментирует... четверг, 28 января 2010 г., 12:10:00 GMT+2

To DragonaS
На GLPI 0.72.2 работает
На GLPI 0.72.3 нет :(
хотя версия плагина PDF 0.6.1 подходит на оба релиза... странно...

Анонимный комментирует... вторник, 23 февраля 2010 г., 17:16:00 GMT+2

Я так понимаю с последней версией 0.72.3 вывод русских символов в pdf так и не работает?

Angel 2S2 комментирует... вторник, 23 февраля 2010 г., 23:51:00 GMT+2

Не знаю, я не юзаю PDF.

Анонимный комментирует... четверг, 25 февраля 2010 г., 11:43:00 GMT+2

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

Angel 2S2 комментирует... четверг, 25 февраля 2010 г., 17:11:00 GMT+2

А в чем проблема? Делаем экспорт в CSV, открывает в OOo Calc (M$ Excel), в качестве разделителя выбираем точку с запятой (там два варианта экспорта, разницы между ними я не увидел) и отправляем на печать.
Разве сложно? ;)

lenz комментирует... четверг, 18 марта 2010 г., 23:09:00 GMT+2

Возник вопрос: как c помощью сей программулины получить файл php_Helvetica.afm??

Angel 2S2 комментирует... пятница, 19 марта 2010 г., 0:01:00 GMT+2

Может имелось ввиду просто *.afm? Он генерится автоматом (по крайней мере у меня он сам создался).

Анонимный комментирует... воскресенье, 26 сентября 2010 г., 13:53:00 GMT+3

А кто нибудь справился с этой проблемой в 0.78 ? там нет export.function.php и utf8_decode встречается только в /lib/ezcomponents/Graph/src/driver/svg.php

athlon128 комментирует... среда, 27 октября 2010 г., 10:19:00 GMT+3

для 0.78 (прочитал на http://www.glpi-project.org/wiki/doku.php?id=ru:faq:faqconfiguration) надо заменить стандартные шрифты на поддерживающие русский в ./lib/ezpdf/fonts/ и изменить кодировку на CP-1251 при вызове функции decodeFromUTF8, в ./inc/search.class.php (6 вхождений).

Анонимный комментирует... пятница, 29 октября 2010 г., 17:10:00 GMT+3

В общем после долгих развлечений выяснил, что файл со шрифтом Helvetica из архива - "пофиксенный", там таблица символов для CP1250 совпадает с таковой для CP1251, поэтому всё и работает. Соответственно, кому критично чтобы это всё работало - ищите редакторы TTF и меняйте таблицу для CP1250 в любимом шрифте. Минус в том, что при каждой смене шрифта придется делать такую операцию. Плюс - будет работать и выдавать красивый PDF при минимальных трудозатратах.
Если хочется чтобы работало правильно с любым шрифтом - надо изучать формат пдф подробнее. PDF умеет всего лишь 4 дефолтные кодировки, и все они западные. Остальные надо как-то задавать через \Differences или кодировку шрифта.. Короче, тут два варианта: либо попробовать прикрутить fpdf (вроде бы умеет работать с кодировками) вместо ezpdf (или попросить об этом разработчиков GLPI), либо ковыряться с различиями.

Анонимный комментирует... понедельник, 20 декабря 2010 г., 14:33:00 GMT+2

> ttf2pt1 -l cyrillic -A Helvetica.ttf Helvetica

Пишет "Cannot access Helvetica.ttf"

Angel2S2 комментирует... понедельник, 20 декабря 2010 г., 14:42:00 GMT+2

Переведите сообщение на русский язык и все станет понятно ;)

Анонимный комментирует... понедельник, 20 декабря 2010 г., 14:47:00 GMT+2

Мне ясен перевод. Мне не ясен способ решения проблемы. Я не знаю, где вообще можно найти этот файл. Система debian 5.0.7.

Angel2S2 комментирует... понедельник, 20 декабря 2010 г., 15:00:00 GMT+2

Можно выполнить команду:
find / -iname 'Helvetica.ttf'

А можно внимательно перечитать пост ;) Там почти в конце есть строка "Теперь копируем файлы вместо старых, не забыв подправить права:" и приведен путь, куда копируем (/var/www/glpi/lib/ezpdf/fonts/) тут и ищите ;)

Кстати, лично мне сообщение говорит о том, что нет доступа, т.е. нет прав на чтение этого файла :)




НО!!!!! Все зависит от того, куда вы положили GLPI. Если GLPI лежит в каталоге /var/www/glpi/*, то путь приведенный выше справедлив, иначе стоит исходить из /путь_к_каталогу_glpi/lib/ezpdf/fonts/.

Лично я брал этот файл тут.

Анонимный комментирует... понедельник, 20 декабря 2010 г., 15:11:00 GMT+2

> /lib/ezpdf/fonts/

Там нет *.ttf, только 2 *.afm.

Ну и find тоже ничего не показал, иначе не спрашивал бы.

Angel2S2 комментирует... понедельник, 20 декабря 2010 г., 15:20:00 GMT+2

Хм... Видать для новых версий уже изменили что-то... Я это делал на 0.71.5 вроде.

Гляньте какой файл шрифта упоминается в "/inc/export.function.php" и попробуйте его найти и конвертнуть.

Либо можете взять уже готовые шрифты. На Helvetica есть линк в конце поста, а в комментах есть ссылки на тахому и times new roman.

Анонимный комментирует... среда, 18 мая 2011 г., 21:51:00 GMT+3

В версии 0.78.5 русский заработал как в посте athlon128.
1)Копируем русские из ссылок выше.
2)Меняем кодировку на CP-1251 при вызове функции decodeFromUTF8, в ./inc/search.class.php

Angel2S2 комментирует... четверг, 19 мая 2011 г., 9:06:00 GMT+3

Спасибо :)
Я как раз на днях поставил себе 0.78.5 :) Но PDF еще не прикручивал :)

Romero комментирует... четверг, 19 мая 2011 г., 9:46:00 GMT+3

------PDF------
В версии 0.78.5 русский заработал как в посте athlon128.
1)Копируем русские шрифты из ссылок выше в каталог
/путь_к_каталогу_glpi/lib/ezpdf/fonts/

2)Меняем кодировку на CP-1251 при вызове функции decodeFromUTF8, в ./inc/search.class.php
--------CSV-----------
1) В файле ./inc/search.class.php меняем
$out="\"".csv_clean($value)."\"".$CFG_GLPI["csv_export_delimiter"];

на

$out="\"".decodeFromUtf8(csv_clean($value),'cp-1251')."\"".$CFG_GLPI["csv_export_delimiter"];

Angel2S2 комментирует... четверг, 19 мая 2011 г., 9:50:00 GMT+3

Спасибо :)

Добавил в пост.

Анонимный комментирует... среда, 18 января 2012 г., 12:28:00 GMT+3

Если сделать так

$out="\"".decodeFromUtf8(csv_clean($value),'cp-1251')."\"".$CFG_GLPI["csv_export_delimiter"];

то в экселе текст со всех строк может сбиться в первую ячейку.
у меня сработало
$out="\"".decodeFromUtf8(csv_clean($value),'cp-1251')." \"".$_SESSION["glpicsv_delimiter"];

Анонимный комментирует... вторник, 21 февраля 2012 г., 13:13:00 GMT+3

Здравствуйте. Установил сегодня версию 0.80.7 - проблема с экспортом в PDF осталась. Кто-нибудь пробовал перечисленные методики на этой версии?

Roman Shagrov комментирует... вторник, 21 февраля 2012 г., 13:57:00 GMT+3

Я не использую этот функционал.

Алексей комментирует... четверг, 22 марта 2012 г., 12:07:00 GMT+3

Первый этап. Значит так, версия 80.7. Ищем файл /var/www/glpi/inc/search.class.php, и редактируем на предмет поиска в нем упоминания функции decodeFromUTF8, меняем кодировку с windows-1252 на windows-1251, должно быть 6 вхождений. Это был первый этап.
Второй этап. Замена шрифтов в папке /var/www/glpi/lib/ezpdf/fonts/, качем к примеру отсюда http://sisyphus.ru/ru/srpm/Sisyphus/glpi/sources и копируем в указанный выше каталог.

Спасибо http://huntablog.blogspot.com/2012/03/glpi-pdf.html

Анонимный комментирует... среда, 5 декабря 2012 г., 15:59:00 GMT+3

Всем привет!
У кого нить заработал плагин Print to PDF в версии 0.83.31? На офф. форуме ничего не отвечают, может здесь кто нить победил?
В папке плагина Fonts есть шрифты в формате *.afm, даже при удалении их ничего не менялось, ни ошибок, ничего. В самом GLPI экспорт прекрасно работает, остался тока этот плагин, который уж очень хорош )))

to Алексей, спасибо за ссылку на мой блог ;)

Заранее благодарен!!!

Виталий Минаев комментирует... пятница, 22 марта 2013 г., 12:06:00 GMT+3

Версия 0.83.7. Всё заработало, как рассказал Алексей! Огромное спасибо!!!

Диана Аимбетова комментирует... вторник, 26 ноября 2013 г., 12:33:00 GMT+3

Добрый день. У меня вопрос по настройке GLPI. Если конкретно, то я хочу импортировать данные уже существующих юзеров с LDAP, чтобы не создавать заново пользователей. Я захожу в LDAP каталог, и заполняю поля.
Сервер пишу наш сервак допустим 192.168.1.1
Фильтр соединений пишу (&(objectClass=user)(objectCategory=person)(!(userAccountCon trol:1.2.840.113556.1.4.803:=2))) Сюда что я только не пробовала не писать, искала везде, как настраивалась, читала форумы где вышли такие же проблемы у меня но у меня ничего не меняется. Тест то проходит успешно, но вот когда делаю иморт контактов, и на поисковике пишу данные из нашего LDAP то он ничего не находит;(
База поиска написала БД нашей адресной книги.
RootDN сюда я писала имя пользователя админа LDAP. Который запрашивается при входе в LDAP. И его пароль. Вроде все как надо, но он контактов не находит;( Не знаю что делать, помогите, пожалуйста.

Roman Shagrov комментирует... вторник, 26 ноября 2013 г., 12:51:00 GMT+3

Добрый день.

Фильтр вроде верный... Для AD.

Имя пользователя (RootDN) нужно указывать в формате "cn=Admin,ou=Users,dc=example,dc=org"

База поиска (baseDN), попробуйте (для проверки) указать самый верх корня, например, dc=example,dc=org. Возможно где-то тут ошибка. Не редко бывает пишут, например, ou, а в этом месте надо cn писать. Если пройдет с самым верхом, то ищите ошибку в пути.

Ну и... Обычно я рекомендую эту статейку еще прочитать - http://www.glpi-project.org/wiki/doku.php?id=ru:doc:start:ldap (хотя... что-то мне подсказывает, что ее вы уже читали)

Если что, напишите на мыло (адрес вверху справа) и приложите скриншот окна с настройками LDAP в GLPI.

Vadim Osipov комментирует... вторник, 8 апреля 2014 г., 9:08:00 GMT+3

У меня версия GLPI 0.84.3 мне помог следующий вариант.
1. Закинул шрифт http://www.tux.in.ua/wp-content/uploads/2009/08/font.rar в папку .../glpi/lib/ezpdf/fonts
2. в файле .../glpi/inc/search.class.php находим упоминания кодировки windows-1252 меняем на windows-1251, должно быть 6 совпадений (открыл этот файл в Notepad++ и сделал поиск 1252 с заменой на 1251).

Andrey Golub комментирует... пятница, 21 ноября 2014 г., 15:00:00 GMT+2

Спасибо Vadim Osipov, помогло))

Отправить комментарий