FPDF генерит "битый" PDF (The file is damaged and could not be repaired)

dmK

Новичок
FPDF генерит "битый" PDF (The file is damaged and could not be repaired)

Пошаговые действия:
1. Создаю afm файл нужного мне кирилического шрифта:
ttf2pt1 -a times.ttf times

2. Генерю для этого шрифта описание:
MakeFont('times.ttf','times.afm','cp1251');

3. Создаю simple PDF:
$pdf=new FPDF();
$pdf->AddPage();
$pdf->AddFont('TimesNewRomanPSMT','','times.php');
$pdf->SetFont('TimesNewRomanPSMT','',16);
$pdf->Cell(40,10,'Превед World!');
$pdf->Output();

В результате в браузере сообщение "The file is damaged and could not be repaired"

Ковырянее в проблеме привело к следующему наблюдению:
Если в файле описания, сгененрированного MakeFont'ом убрать $file='times.z'; то будет генериться читаемый PDF, правда с сообщением "Cannot extract embedded font 'TimesNewRomanPSMT'. Some characters may not display or print correctly." Под some characters имеллись ввиду, естественно, кирилический символы.

хелп плиз в)

-~{}~ 07.11.06 16:23:

Есть мнение что это либо из-за настроек пхп, либо из-за самой версии пхп, так как месяца два назад все прекрасно работало, а сейчас нет.

PHP Version 5.1.4

-~{}~ 07.11.06 17:28:

Разрулил проблему. Посвящается потомкам в))

Проблема была, как и предпологалось, в настройках php, а именно:

extension=php_mbstring.dll
mbstring.language = Russian
mbstring.internal_encoding = UTF-8

Перед генерацией PDF следует переключить mbstring на latin1, после чего можно смело ее восстанавливать, если вы продолжаете работу после генерации. В общем случае это может выглядеть следующим образом:

if (function_exists('mb_internal_encoding')) {
$oldEncoding=mb_internal_encoding();
mb_internal_encoding('latin1');
}

$pdf=new FPDF();
$pdf->AddFont('TimesNewRomanPSMT','','times.php');
$pdf->AddPage();
$pdf->SetFont('TimesNewRomanPSMT','',35);
$pdf->Cell(0,10,'Преветек от dmK ;)');
$pdf->Output();

if (function_exists('mb_internal_encoding'))
mb_internal_encoding($oldEncoding);
 

bkonst

.. хочется странного?...
Странное какое-то решение.
С каких это пор FPDF использует mbstring?
 

slach

Новичок
bkonst
ничего странного

mdstring используется когда хочется в php полностью перейти на utf-8 с сохранением работы всяких там str_replace и т.п.

-~{}~ 04.02.07 13:56:

соответсвенно у человека просто был подключен extension соответсвующий
 

Tempter

Новичок
К сожалению предложенный вариант решения не помог.
Файлы до сих пор генерятся то в битом, то в нормальном виде.
Т.е. 1 раз из 10 можно получить нормальный пдф, ничего не меняя в коде.
Я думаю может быть проблема с сжатием перед выводом?
Кто нибудь еще имеет какие нибудь пути решения? :(
 
Сверху