Некорректное отображение кириллических шрифтов в PDF формуляре

Рано или поздно встает вопрос о генерации PDF файлов. Он удобен, а страницы можно сделать довольно красивыми. Есть много разных библиотек для PHP, у меня в данном случае стояла задача сделать на FPDF. Данная библиотека, а точнее класс распространяется бесплатно и умеет работать с разными типами кодировок, в том числе и с CP1251. Наверно минусом этой библиотеки является отсутствие поддержки UTF, но есть отдельная пропатченная библиотека UFPDF, ее рассматривать я не буду.

Вы наверно спросите почему мучение с кириллицей? Скажем так, я потратил много времени на поиски, как заставить показывать русский текст, а не каракули. Делал я все по мануалам, официальных источников.
Итак, для того что бы был русский текст нам нужны шрифты, я делал для Arial, Times New Roman, Verdana. Создайте в своем проекте папку fonts. Скиньте туда нужные шрифты. Теперь нам нужно с конвертировать их для FPDF. На многих сайтах предлагают использовать специальную утилиту ttf2pt1.

Ttf2pt1 -a arial.ttf arial Сохранив, проверим в браузере. Он создает 2 файла, потом надо создать php файл и сделать следующее, а точнее он создаст php файл который содержит информацию о шрифте. Не забудьте поставить права на папку, где будете генерировать шрифты.

Все это я делал ни один раз. И никак скрипт не хотел работать. После чего я нашел более простой способ конвертирования шрифтов.
Идем http://fpdf.fruit-lab.de/index.php?id=3 на этот сайт. Выбираем кодировку cp1251, далее прикрепляем нужный нам шрифт и жмем Convert. Там нас будет интересовать php, afm, z. Скачивайте эти файлы в созданную нами папку fonts. Далее нужно переименовать файл.php.txt в.php.
После чего откроем этот php файл (с сайта мы скачиваем его в.php.txt и потом переименовываем). В данном случае нас будет интересовать имя шрифта ($name="ArialMT";). Теперь у нас есть шрифт и имя шрифта. Можно приступить к созданию самого генератора PDF. Создаем нужный нам файл, подключаем нужные библиотеки.

Define("FPDF_FONTPATH", __system_directory__ ."API/font/"); // на всякий случай я прописал полный путь до библиотеки. require("/usr/share/php/fpdf/fpdf.php"); // объявляем класс и конструктор класса, в данном случае у меня альбомный лист $pdf=new FPDF("L"); //нужно подключить шрифт, указав имя шрифта и имя файла. $pdf->AddFont("ArialMT","","119379869a251bdd6a14438b3c5514f2_arial.php"); $pdf->AddPage(); // выбираем шрифт для текста. $pdf->SetFont("ArialMT","",35); $pdf->Cell(40,10,"русский текст!"); $pdf->Output();

Основное время я потратил из-за возникавшей ошибки: «FPDF error: Undefined font: arialmt B» Она наверно вызывалась неверной конвертацией шрифта, когда пользовался MakeFont или использованием неверного параметра, к примеру ошибка возникает, когда 2 параметр не совпадает с SetFont или наоборот.

// Ошибка в этом примере:
$pdf->AddFont("ArialMT","","119379869a251bdd6a14438b3c5514f2_arial.php"); $pdf->SetFont("ArialMT","B",35); //И в такой тоже: $pdf->AddFont("ArialMT","B","119379869a251bdd6a14438b3c5514f2_arial.php"); $pdf->SetFont("ArialMT","",35); //работает $pdf->AddFont("ArialMT","B","119379869a251bdd6a14438b3c5514f2_arial.php"); $pdf->SetFont("ArialMT","B",35);

Как оказалось ошибки были на пустом месте, но я рад что разобрался с ними, и буду надеяться что эта маленькая статья поможет не терять время, на поиск проблемы связанной c кодировками.


01.02.2005, 21:28

пытаюсь впечатать текст по-русски в pdf file (конкретно - анкета для получения загранпаспорта), и ничегошеньки не получается. Вернее, получается абракадабра. С английским все в порядке, а вот русский мой Adobe Acrobat 6.0 Professional почему-то коверкает, хоть напрямую, хоть copy-paste.что делать?
спасибо

02.02.2005, 10:34

02.02.2005, 12:16

шрифтов русских в системе не хватает, либо Acrobat работает со шрифтом, в котором кириллицы нет.

Понятно, но вот что ж теперь делать? в остальных программах нет проблем писать по-русски. а как поменять шрифт с которым Acrobat работает? я там вообще не могу найти, где меняется размер и тип шрифта. Должно же быть какое-то font menu вот только где?

♣ Клевер

02.02.2005, 13:18

02.02.2005, 17:01

А может не париться и просто взять вордовую анкету и заполнить ее? Качнуть можно, например, отсюда http://www.lentatour.ru/doc/anketa_ovir.doc

Да они мне уже сказали, что пока еще никому не удавалось привезти такую, чтоб их устраивала:) а все, скачанные не с посольского сайта, довольно-таки отличаются от "оригинала".

02.02.2005, 17:13

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

Мне уже самой интересно акробата побороть!
Переведите pdf. файл в Word (с помощью Fine Reader) и заполните! Должна получиться практически такая же.

02.02.2005, 17:54

Мне уже самой интересно акробата побороть!

Прицепите ее сюда или скажите где взять

02.02.2005, 20:54

Переведите pdf. файл в Word (с помощью Fine Reader) и заполните! Должна получиться практически такая же.

Кто такой? почему не знаю?

Я раньше всегда просто сохраняла как rtf или doc,но c этим конкретным файлом получается ерунда почему-то.

Нет, серьезно: Fine reader -это что?

02.02.2005, 21:02

прицепите ее сюда или скажите где взять

Сюда pdf не зепляется - слишком большой.
вот адрес:

Http://www.rusemblon.org/logon_rus.htm

Идите в русскую версию, слева появляется опция "ОЗП" , далее п.3 - заявление-анкета на выдачу ЗП

Честно говоря, добрый Indiana Jones дал мне rtf с очень похожей, но не точно такой анкетой, которую я модифицировала и собираюсь завтра попытаться (откладывать дальше поездку не могу - завал на работе будет). Но моя последняя версия все равно отличается от "оригинала".

Если у Вас получится - научите как с "ними" бороться и с акробатом заодно. + (большой плюс!) у людей будет анкета для консульства - Вам многие спасибо скажут.

02.02.2005, 21:36




02.02.2005, 21:52

нужно использовать поскрипт-шрифты
Похоже у вас Виндовоз или 2000 или ХР?
pdf работает с кириллицей только в 98-вом Виндовозе.
В остальных системах только с поскриптами.
да уж чего греха таить - Виндовоз у меня ХП (проффессионал!) , так что теперь понятно, что у не профессионала (меня) ничего там с кириллицей и не могло быть хорошего. Уже приятно узнать.
А еще приятнее было бы узнать, что это за шрифты такие (как они, кстати, по-аглицки называются?), и где их брать. А то я рада бы с ними работать, да вот не знаю как. Товарищ профессионал, научите, пожалуйста!

02.02.2005, 22:44

Если у Вас получится - научите как с "ними" бороться и с акробатом заодно. + (большой плюс!) у людей будет анкета для консульства - Вам многие спасибо скажут.

Я прицепил фонт который должен работать (правда чистого курсива там нет). установите его, потом в Акробате Tools -> TouchUp Text ->

08.02.2005, 19:37

я прицепил фонт который должен работать (правда чистого курсива там нет). установите его, потом в Акробате Tools -> TouchUp Text -> Text Attributes, из списка выберите CyrillicTimes с соответствующими аттрибутами. Тестировалось на Acrobat 5.0. Если раскладка клавиатуры постоянно слетает на английскую, то можно просто набрать то что надо в блокноте и вставить через клипборд

Ничего не получилось - то ли потому, что в 6.0 нет text attributes (или я их не могу найти), то ли еще почему:(

09.02.2005, 09:42

ничего не получилось - то ли потому, что в 6.0 нет text attributes (или я их не могу найти), то ли еще почему:(

Попробовал шестой, там даже еще лучше. в режиме редактирования (TouchUp Text Tool) правая кнопка мыши -> properties ->

09.02.2005, 11:34

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

09.02.2005, 11:40

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

Будем. до победного конца

Перезапустите акробат

09.02.2005, 12:01

будем. до победного конца

Скопируйте папку со шрифтами, которая в архиве, в C:\Program Files\Common Files\Adobe\Fonts

Перезапустите акробат

Ох, ну, держитесь!.. :)

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

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

09.02.2005, 13:16

Как раз на днях делала перевод в PDF файле, так что проблема знакомая. Аcrobat не будет работать ни с какими русскими шрифтами ни True Type, ни Type I, пока вы не установите plug-in который называется Pit Stop и он типа встроит шрифт в файл (кажется так, запомнила на слух, т.к. сама этот plug-in не устанавливала). Я открывала pdf файлы в программе Adobe Illustrator СS и там их гадов и правила, сохраняются в формате pdf и без проблем открываются в Акробате, русский шрифт отображается корректно, правда при попытке поправить непосредственно в акробате на русском, опять появляются корявки вместо букв. Да и размер файла увеличивается раз в 10 с русским шрифтом.

Некоторое время назад я столкнулся с интересной проблемой: у пользователя некорректно отображаются кириллические шрифты в PDF формуляре при просмотре расчетного листка. Расчетный листок формируется из портального сервиса самообслуживания сотрудников. В условиях данной задачи, также «дано», что в постоянных значениях основной записи пользователя, для параметра «Устройство вывода», установлено значение «PDF».

Посмотрим, что было сделано, для ее исправления этой ошибки.

Для начала необходимо определить наименование шрифта, который не отображается на портале. Для этого, в открывшемся сервисе «Просмотр расчетного листка», кликнуть кнопкой мыши и в контекстном меню выбрать пункт «Document Properties»:

Затем перейти на вкладку Fonts:


Рисунок 3. Свойства PDF — шрифты

В данном случае, используемый в PDF-формуляре шрифт, Courier. Скачиваем TrueType шрифт Courier и устанавливаем его в системе, с которой «связан» портал.
При этом необходимо обязательно убедиться, в том, что данный шрифт поддерживает кириллицу. Запускаем программу RSTXPDF2UC, выбираем на селекционном экране опцию «Перечислить атрибуты шрифта» и смотрим на раздел «Поддержанные языки/Сценарии»:


В данном случае, раздел «Поддержанные языки/сценарии» пустой. Для решения проблемы с некорректно отображаемыми кириллическими шрифтами в PDF формуляре, необходимо найти шрифт, который будет поддерживать кириллическую область уникода. К таким шрифтам, к примеру, относится Courier New:


Шрифт Courier New отлично подходит для решения вышеописанной проблемы.

После того, как необходимый шрифт был найден и сохранен на локальный компьютер (файл с расширение *.TTF) необходимо запустить программу RSTXPDF2UC в back-end системе, выбрать пункт «Инсталлировать шрифт True type»:


В появившемся окне необходимо выбрать директорию, в которой сохранен TTF файл



В появившемся диалоговом окне консультанту будет предложено создание нового шрифта в системе. Необходимо выбрать «Да»:

В следующем диалоговом окне будет предложено использование данного шрифта в PDF-файлах. Необходимо выбрать «Да»

Затем система предложит внесенные изменения сохранить в транспортный запрос

После выполненной установки отобразится справочная информация о шрифте:

Далее нужно создать правило мэппинга для только что установленного в системе шрифта. Правило мэппинга определяет для каких символов будет использоваться тот или иной шрифт. Для этого необходимо выбрать пункт «Создать/изменить правило мэппинга» на селекционном экране программы RSTXPDF2UC:


В появившемся диалоговом окне выбрать «Да»

Затем необходимо выбрать только что установленный шрифтданном примере, это Courier New)

Определяем поддерживаемые области для нового шрифта (в нашем случае необходимо выбрать значение CYRYLLIC)

Затем внесем изменения в устройство вывода, использующееся в системе для работы с PDF формулярами. Для этого открываем транзакцию SPAD:


Выбираем устройство вывода «PDF», нажимаем на кнопку «Просмотр». В открывшемся экране меняем тип устройства с POST2 на PDUFC.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: