Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: А можно ли так делать, а если нет то как сделать....  (Прочитано 13725 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Avdey
Участник

ru
Offline Offline

« : 08-01-2012 07:04 » 

Смотрите я работаю с классом FPDF и в общем-то не жалуюсь, всё получается, но много раз приходится писать один и тот же код, вы скажите напиши функцию и всё будет в порядке....но у меня вот в чём вопрос:

Вот код:
Код:
<?php
$pdf
->Write(0, &#39;Здравствуйте этот символ&#39;);
$pdf->WriteSymbol(chr(187)); //Нельзя ни как убрать эту строку? я просто не глубоко знаю работу с классами и не подскажите, как можно упростить код?
$pdf->Write(0, &#39; - означает округление&#39;);
?>

В результате будет с генерирован PDF файл и в нём будет написано:

Здрасти этот символ ≃ - означает округление

Почему нельзя вот так сделать:

Код:
<?php
$pdf
->Write(0, &#39;Здравствуйте  этот сивол &#39; . WriteSymbol(chr(187)) . &#39; - означает округление &#39;);
?>

А может можно...я в общем не знаю, подскажите....
« Последнее редактирование: 08-01-2012 13:01 от Avdey » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 08-01-2012 08:59 » 

1. С первого взгляда - а почему бы и нет.
2. А не проще ли попробовать, только чуть-чуть изменить
<?
$pdf->Write(0, 'Здрасти этот сивол ' . chr(187) . ' - означает округление ');
?>
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Avdey
Участник

ru
Offline 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, &#39; Вот знак который мне нужен &#39;.$pdf->WriteSymbol(chr(187)).&#39;  - он означает &#39;);
?>

это работает но не корректно, получается вот что

вывод в PDF-файл

"знак" а потом пишет  "Вот знак который мне нужен он означает"

а не

"Вот знак который мне нужен "знак" он означает"
ачает"
« Последнее редактирование: 08-01-2012 13:03 от Avdey » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Участник

ru
Offline Offline

« Ответ #4 : 08-01-2012 09:54 » 

Понимаете функций много, на пример вот такая задача:

Нужно написать следующую строку в PDF-файле: "Привет, это пример как реализовать нижний индекс у числа 232 через класс FPDF"

Код будет следующий:
Код:
<?php
$pdf
->Write(0, &#39;Привет, это пример как реализовать нижний индекс у числа 23&#39;);
$pdf->SubWrite(0,&#39;2&#39;,&#39;&#39;,6,-3);
$pdf->Write(0, &#39; через класс FPDF&#39;);
?>

и таких функций много, которые можно было бы чтоб они в одну строку писались....так что решить проблему с WriteSymbol поковырясь в функции, это не решить проблему в целом.

Но вот код функции Write из класса


Код:
<?php
function Write($h$txt$link=&#39;&#39;)
{
//Output text in flowing mode
$cw=&$this->CurrentFont[&#39;cw&#39;];
$w=$this->w-$this->rMargin-$this->x;
$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
$s=str_replace("\r",&#39;&#39;,$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,&#39;&#39;,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==&#39; &#39;)
$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,&#39;&#39;,0,$link);
}
else
{
$this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,&#39;&#39;,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,&#39;&#39;,0,$link);
}
?>


и SubWrite

Код:
<?php
function subWrite($h$txt$link=&#39;&#39;, $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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 08-01-2012 10:05 » 

Я объяснил, как это работает
Если функций много, то все же, умаю, что нужно придумать свой парсер входной строки со своим шаблонизатором

Например

'Здрасти этот сивол %%__chr . (chr(187)) . '__%% - означает округление '
таким образом, что все что находится между %%__chr __%% будет выводить в поток аналогично WriteSymbol
или
'%%__sub'.Строка.__%%

М... ну.. тут шаблоны далеки от идеала
Или использовать, что-то наподобие bbcode
[chr]символ[/chr]
[sub]строка[/sub]



Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 08-01-2012 11:26 » 

Avdey,
1. Пиши по-русски. Детские ошибки типа "упрАстить" лично меня пугают.
2. Оборачивай код тегом code. Если хочешь, чтобы твои посты чаще читали, чем не читали - оформлять пост обязательно.
3. Используй "скобки" "<?php ?>", а не сокращенные.

Все три пункта указывают на несобранность и неаккуратность. Надо работать над собой!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Avdey
Участник

ru
Offline 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
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 08-01-2012 13:46 » 

Во-первых, это показывает неаккуратность программиста. Во-вторых, это снижает совместимость. На всех системах поддерживается "<?php", но не на всех разрешен короткий тег.

Читаем целиком, а не между строк!
http://ru.php.net/manual/en/language.basic-syntax.phpmode.php
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 08-01-2012 13:48 » new

Avdey, shortag почитай - http://php.net/manual/en/ini.core.php - поймешь

$pdf->Write(0, 'Привет, это пример как реализовать нижний индекс у числа 2[sub]3[/sub]');
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines