| 
			| 
					
						| Avdey 
								Участник    Offline | 
								|  | «  : 08-01-2012 07:04 »  |  | 
 
 Смотрите я работаю с классом FPDF и в общем-то не жалуюсь, всё получается, но много раз приходится писать один и тот же код, вы скажите напиши функцию и всё будет в порядке....но у меня вот в чём вопрос: Вот код: <?php$pdf->Write(0, 'Здравствуйте этот символ');
 $pdf->WriteSymbol(chr(187)); //Нельзя ни как убрать эту строку? я просто не глубоко знаю работу с классами и не подскажите, как можно упростить код?
 $pdf->Write(0, ' - означает округление');
 ?>
В результате будет с генерирован PDF файл и в нём будет написано: Здрасти этот символ ≃ - означает округление Почему нельзя вот так сделать: <?php$pdf->Write(0, 'Здравствуйте  этот сивол ' . WriteSymbol(chr(187)) . ' - означает округление ');
 ?>
А может можно...я в общем не знаю, подскажите.... |  
						| 
								|  |  
								| « Последнее редактирование: 08-01-2012 13:01 от Avdey » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #1 : 08-01-2012 08:59 »  |  | 
 
 1. С первого взгляда - а почему бы и нет.2. А не проще ли попробовать, только чуть-чуть изменить
 <?
 $pdf->Write(0, 'Здрасти этот сивол ' . chr(187) . ' - означает округление ');
 ?>
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| Avdey 
								Участник    Offline | 
								|  | « Ответ #2 : 08-01-2012 09:11 »  |  | 
 
 Так не сделаешь так как функция WriteSymbol прописана мною в классе FPDF и она меняет шрифт в котором под номером  chr(187)  стоит знак, который мне нужен а потом меняет шрифт обратно, и если я пропишу как вы показали то получу знак под этим номером но не тот который мне нужен. А так как я написал выше, браузер выдаёт ошибку и говорит: Fatal error: Call to undefined function WriteSymbol() in Z:\home\localhost\www\storeofnavi\local\application\oms_po_2lp\algorithm\OMS.php on line 490 а если прописать так  <?php$pdf->Write(0, ' Вот знак который мне нужен '.$pdf->WriteSymbol(chr(187)).'  - он означает ');
 ?>
 
это работает но не корректно, получается вот что вывод в PDF-файл  "знак" а потом пишет  "Вот знак который мне нужен он означает" а не  "Вот знак который мне нужен "знак" он означает" ачает" |  
						| 
								|  |  
								| « Последнее редактирование: 08-01-2012 13:03 от Avdey » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #3 : 08-01-2012 09:39 »  |  | 
 
 ТЗ нужно ставить сразу, а не по ходу вопроса.
 $pdf->Write(0, ' Вот знак который мне нужен '.$pdf->WriteSymbol(chr(187)).'  - он означает ');
 
 все верно, как ты описал...
 Обясню...
 
 Что происходит.
 
 Соединение строк (понятно)
 ' Вот знак который мне нужен '.$pdf->WriteSymbol(chr(187)).'  - он означает '
 
 более интересно
 $pdf->WriteSymbol(chr(187)) - задача функции вернуть результат.
 Какой рез она возвращает не имеет значения, результат склеивается с другим подстроками
 Но! Сама функция работает с pdf потоком, т.е она вывела в поток (выполнилась), вернула результат, склеилась и уже вывелась  в подготовленной строке в поток.
 
 покажи код
 WriteSymbol и Write
 
 Может быть, нужно сделать, что либо наподобие стандартный функций, например printf или sprintf
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| Avdey 
								Участник    Offline | 
								|  | « Ответ #4 :  08-01-2012 09:54 »   |  | 
 
 Понимаете функций много, на пример вот такая задача: Нужно написать следующую строку в PDF-файле: "Привет, это пример как реализовать нижний индекс у числа 232  через класс FPDF" Код будет следующий:  <?php$pdf->Write(0, 'Привет, это пример как реализовать нижний индекс у числа 23');
 $pdf->SubWrite(0,'2','',6,-3);
 $pdf->Write(0, ' через класс FPDF');
 ?>
 
и таких функций много, которые можно было бы чтоб они в одну строку писались....так что решить проблему с WriteSymbol поковырясь в функции, это не решить проблему в целом. Но вот код функции Write из класса <?phpfunction Write($h, $txt, $link='')
 {
 //Output text in flowing mode
 $cw=&$this->CurrentFont['cw'];
 $w=$this->w-$this->rMargin-$this->x;
 $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
 $s=str_replace("\r",'',$txt);
 $nb=strlen($s);
 $sep=-1;
 $i=0;
 $j=0;
 $l=0;
 $nl=1;
 while($i<$nb)
 {
 //Get next character
 $c=$s[$i];
 if($c=="\n")
 {
 //Explicit line break
 $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link);
 $i++;
 $sep=-1;
 $j=$i;
 $l=0;
 if($nl==1)
 {
 $this->x=$this->lMargin;
 $w=$this->w-$this->rMargin-$this->x;
 $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
 }
 $nl++;
 continue;
 }
 if($c==' ')
 $sep=$i;
 $l+=$cw[$c];
 if($l>$wmax)
 {
 //Automatic line break
 if($sep==-1)
 {
 if($this->x>$this->lMargin)
 {
 //Move to next line
 $this->x=$this->lMargin;
 $this->y+=$h;
 $w=$this->w-$this->rMargin-$this->x;
 $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
 $i++;
 $nl++;
 continue;
 }
 if($i==$j)
 $i++;
 $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link);
 }
 else
 {
 $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',0,$link);
 $i=$sep+1;
 }
 $sep=-1;
 $j=$i;
 $l=0;
 if($nl==1)
 {
 $this->x=$this->lMargin;
 $w=$this->w-$this->rMargin-$this->x;
 $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
 }
 $nl++;
 }
 else
 $i++;
 }
 //Last chunk
 if($i!=$j)
 
 $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',0,$link);
 }
 ?>
 
и SubWrite <?phpfunction subWrite($h, $txt, $link='', $subFontSize=12, $subOffset=0)
 {
 // resize font
 $subFontSizeold = $this->FontSizePt;
 $this->SetFontSize($subFontSize);
 
 // reposition y
 $subOffset = ((($subFontSize - $subFontSizeold) / $this->k) * 0.3) + ($subOffset / $this->k);
 $subX        = $this->x;
 $subY        = $this->y;
 $this->SetXY($subX, $subY - $subOffset);
 
 //Output text
 $this->Write($h, $txt, $link);
 
 // restore y position
 $subX        = $this->x;
 $subY        = $this->y;
 $this->SetXY($subX,  $subY + $subOffset);
 
 // restore font size
 $this->SetFontSize($subFontSizeold);
 }
 
оф сайт http://fpdf.org/ |  
						| 
								|  |  
								| « Последнее редактирование: 08-01-2012 13:05 от Avdey » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #5 : 08-01-2012 10:05 »  |  | 
 
 Я объяснил, как это работаетЕсли функций много, то все же, умаю, что нужно придумать свой парсер входной строки со своим шаблонизатором
 
 Например
 
 'Здрасти этот сивол %%__chr . (chr(187)) . '__%% - означает округление '
 таким образом, что все что находится между %%__chr __%% будет выводить в поток аналогично WriteSymbol
 или
 '%%__sub'.Строка.__%%
 
 М... ну.. тут шаблоны далеки от идеала
 Или использовать, что-то наподобие bbcode
 [chr]символ[/chr]
 [sub]строка[/sub]
 
 
 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #6 : 08-01-2012 11:26 »  |  | 
 
 Avdey, 1. Пиши по-русски. Детские ошибки типа "упрАстить" лично меня пугают.
 2. Оборачивай код тегом code. Если хочешь, чтобы твои посты чаще читали, чем не читали - оформлять пост обязательно.
 3. Используй "скобки" "<?php ?>", а не сокращенные.
 
 Все три пункта указывают на несобранность и неаккуратность. Надо работать над собой!
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Avdey 
								Участник    Offline | 
								|  | « Ответ #7 : 08-01-2012 13:09 »  |  | 
 
 Avdey, 1. Пиши по-русски. Детские ошибки типа "упрАстить" лично меня пугают.
 2. Оборачивай код тегом code. Если хочешь, чтобы твои посты чаще читали, чем не читали - оформлять пост обязательно.
 3. Используй "скобки" "<?php ?>", а не сокращенные.
 
 Все три пункта указывают на несобранность и неаккуратность. Надо работать над собой!
 
 
 Исправился по двум пунктам, но по 3....почему нельзя писать сокращённые скобки <? ?> ? Я объяснил, как это работаетЕсли функций много, то все же, умаю, что нужно придумать свой парсер входной строки со своим шаблонизатором
 
 Например
 
 'Здрасти этот сивол %%__chr . (chr(187)) . '__%% - означает округление '
 таким образом, что все что находится между %%__chr __%% будет выводить в поток аналогично WriteSymbol
 или
 '%%__sub'.Строка.__%%
 
 М... ну.. тут шаблоны далеки от идеала
 Или использовать, что-то наподобие bbcode
 [chr]символ[/chr]
 [sub]строка[/sub]
 
 
 
 Дайте пример парсера входной строки, гляну и пойму всё. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #8 : 08-01-2012 13:46 »  |  | 
 
 Во-первых, это показывает неаккуратность программиста. Во-вторых, это снижает совместимость. На всех системах поддерживается "<?php", но не на всех разрешен короткий тег. Читаем целиком, а не между строк!http://ru.php.net/manual/en/language.basic-syntax.phpmode.php |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #9 : 08-01-2012 13:48 »  |  | 
 
 Avdey, shortag почитай - http://php.net/manual/en/ini.core.php  - поймешь $pdf->Write(0, 'Привет, это пример как реализовать нижний индекс у числа 2[sub]3[/sub]'); |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	|  |