[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Генерация PDF на основе шаблонов
zvezda_t
Задача:
На сайте пользователь заполняет форму, и на основе полученных данных должен формироваться документ1 в формате PDF.

Есть шаблон документа1 в Word, с полями для вставки данных.
Мне же в результате нужен PDF документ.

Получается сценарием php мне надо будет открыть файл шаблона, заменить заполнители в шаблоне требуемыми данными. И отправить сгенерированный документ в браузер.
Вопрос:
1)Можно ли создать шаблон PDF документа, используя Adobe Acrobat(это же платная программа )? И нужен ли вообще pdf шаблон, раз уже есть шаблон Word???

Подскажите пожалуйста пути решения задачи!



Спустя 1 час, 56 минут, 15 секунд (2.02.2010 - 12:27) Gradus написал(а):
Цитата
И нужен ли вообще pdf шаблон, раз уже есть шаблон Word???

Это у вас надо спросить smile.gif
Цитата
Можно ли создать шаблон PDF документа, используя Adobe Acrobat(это же платная программа )?

Можно сделать в адобе , а в php уже по координатам ставить значения, либо верстать pdf в php .Для работы с pdf вам нужен класс epdf

Спустя 3 минуты, 44 секунды (2.02.2010 - 12:30) Oyeme написал(а):
Работа s doc. не очень проста,тебе придётся использовать COM комнонент(хранилище,обектов)поддержку в апаче включиь.
Через него считываешь док в массив ,так редактируешь и потом в pdf, с pdf уже полно классов для работы.

Спустя 46 секунд (2.02.2010 - 12:31) zvezda_t написал(а):

Цитата
в php уже по координатам ставить значения


Координаты задавать замучиешься!!
Хочу заменить заполнители в шаблоне требуемыми данными, но для этого мне нужен шаблон! Как и чем его сделать??? ПОдсажите пожалуйста!!!

Спустя 2 минуты, 5 секунд (2.02.2010 - 12:33) Gradus написал(а):
Цитата
Хочу заменить заполнители в шаблоне требуемыми данными, но для этого мне нужен шаблон!

раз его нет, верстайте его на php.Другого варианта на сколько я знаю нет.

Спустя 34 секунды (2.02.2010 - 12:34) zvezda_t написал(а):
Цитата
Работа s doc. не очень проста,тебе придётся использовать COM комнонент(хранилище,обектов)поддержку в апаче включиь.
Через него считываешь док в массив ,так редактируешь и потом в pdf, с pdf уже полно классов для работы.



А если сразу создать шаблон pdf, и там заменить заполнители требуемыми данными??? Это проще сделать?
Как проще всего создать шаблон pdf???

Спустя 1 минута, 16 секунд (2.02.2010 - 12:35) zvezda_t написал(а):
Цитата
раз его нет, верстайте его на php.Другого варианта на сколько я знаю нет.


А используя Adobe Acrobat нельзя шаблон сделать?????

Спустя 7 минут, 10 секунд (2.02.2010 - 12:42) Gradus написал(а):
хотя есть вариант... если открыть pdf файл текст. редактором можно увидеть исходник, остаёться только перезаписать подставив другие значения.допустим в адобе.В ячейке пишете $MOZGUS , а в php открываете заменяете это слово на значение.Но учтите что координаты будут стоять на месте тобеж ничего расширяться не будет.

Спустя 14 минут, 52 секунды (2.02.2010 - 12:57) zvezda_t написал(а):
Цитата
ничего расширяться не будет.


это не правильно мне кажется(((
Явно проблемы будут(

А если самой покоординатно формировать pdf использую класс fpdf (наепример) это же вообще не реально! Документов много, замучиешься(((

Что делать то?

Спустя 16 минут, 40 секунд (2.02.2010 - 13:14) Gradus написал(а):
Мучиться smile.gif Мне кажеться быстрей будет сверстать в pdf чем координально подставлять значения тем более что тоже ничего двигаться не будет, а если с 0 верстать то все возможности в ваших руках

Спустя 1 час, 54 минуты, 18 секунд (2.02.2010 - 15:08) krasilich написал(а):
Создать pdf с нуля cредствами php будет проще, чем использовать шаблон.
Желательно этот код вынести в отдельный файл/класс, тогда сохраниться возможность легкого изменения формата документа.

Спустя 1 минута, 20 секунд (2.02.2010 - 15:09) zvezda_t написал(а):
Цитата
Создать pdf с нуля cредствами php будет проще, чем использовать шаблон.
Желательно этот код вынести в отдельный файл/класс, тогда сохраниться возможность легкого изменения формата документа.


И все переменные по координатно выводить??

Спустя 2 минуты, 20 секунд (2.02.2010 - 15:12) krasilich написал(а):
Это проблема?

Один раз ввести и забыть.

Спустя 1 минута, 10 секунд (2.02.2010 - 15:13) zvezda_t написал(а):
Документы могут редактироваться...

Спустя 1 час, 57 минут, 8 секунд (2.02.2010 - 17:10) Gradus написал(а):
ну ручками редактировать...
Если с нуля будете писать обьекты будут двигаться, там уже можете сделать небольшое администрирование каждой pdf

Спустя 15 часов, 49 минут, 23 секунды (3.02.2010 - 08:59) zvezda_t написал(а):
Всем привет!
Подскажите пожалуйста, можно ли сделать Автоматическую конвертацию html в pdf с помощью fpdf???

Спустя 1 минута, 49 секунд (3.02.2010 - 09:01) zvezda_t написал(а):
или КАК сгенерировать PDF-документ из шаблона HTML?

Спустя 29 минут, 53 секунды (3.02.2010 - 09:31) zvezda_t написал(а):
Может кто работал с HTML2FPDF?

Спустя 1 час, 17 минут, 55 секунд (3.02.2010 - 10:49) Gradus написал(а):
Сталкивался, html плохо понимает.Например вложеные таблички уже не понимает...

Спустя 6 дней, 3 часа, 55 минут, 20 секунд (9.02.2010 - 14:44) zvezda_t написал(а):
в FPDF
есть функции
Cell(); //для выввода текста в ячейку
MultiCell(); // для вывода текста в ячейку с автоматически меняющейся высотой.

А можно ли сделать таблицу, с автоматически меняющейся высотой ячеек???

Спустя 58 минут, 33 секунды (9.02.2010 - 15:43) Adil написал(а):
Если честно я не знаю, но лучше посмотри в мануале. Раздел ->tutorials->tables
http://www.fpdf.org/

Спустя 16 часов, 23 минуты, 37 секунд (10.02.2010 - 08:06) zvezda_t написал(а):
Цитата
Раздел ->tutorials->tables


к сожалению там таблицы статичные, в ячейку текст в две строки записать ннельзя(

Спустя 2 часа, 45 минут, 22 секунды (10.02.2010 - 10:52) Gradus написал(а):
у меня есть самописный класс.Но можно обойтись без него.
Допустим вы испоьзуете MultiCell, перед ним создайте переменные которые запомнят координаты x и y.После этой ячейке нарисуйте рамку используя Rect , подставив координаты x,y

P.S. Да кстати совсем забыл на основе html вроде можно, но для этого использовать платную api'шку http://www.htm2pdf.co.uk/ - если на сайте у них работает только используя php то это супер smile.gif

Спустя 10 минут, 57 секунд (10.02.2010 - 11:03) zvezda_t написал(а):
MultiCell(180,5,$text1,1,'L');

4 параметр - отвечает за рамку, это не проблема.

Не могу поставить рядом два компонента MultiCell, чтоб получились две ячейки не фиксированной высоты.

если два подряд вызова:
$this->MultiCell(90,5,$text1,1,'L');
$this->MultiCell(90,5,$text1,1,'L');
то вторая ячейка будет под первой, а не рядом((

Спустя 14 минут, 2 секунды (10.02.2010 - 11:17) Gradus написал(а):
потому что это свойство MultiCell такое.
Опять же после первой ячейки устанавливаете координаты до первой ячейки.
SetY , SetX + нужная длинна

Спустя 1 час, 6 минут, 41 секунда (10.02.2010 - 12:24) zvezda_t написал(а):
работает.

но в таком варианте - постоянно вести подсчет координат, и контролировать чтоб не было наложения...

А готового класса таблиц - точно нет? wub.gif

Спустя 35 минут, 42 секунды (10.02.2010 - 12:59) Gradus написал(а):
неа, мне самому пришлось их делать smile.gif
фак рус по функциям http://nightweb.ru/doc_ru_php_fpdf/index.htm

Спустя 31 минута, 15 секунд (10.02.2010 - 13:30) zvezda_t написал(а):
вопрос важный появился:

Можно ли в нутри одного: MultiCell(), вывести разный текст - например Обычный и жирный.

Очень нужно!!!!!

Спустя 37 минут, 10 секунд (10.02.2010 - 14:08) Gradus написал(а):
Цитата
Можно ли в нутри одного: MultiCell(), вывести разный текст - например Обычный и жирный.

не предусмотрено

по просьбе из чата smile.gif
В общем ошибки придёться поисправлять, потому что писал на скорую руку и расчитана на взаимодействие с другими классами которые тоже самописные а может и нет, поэтому думаю придёться немного помучиться wink.gif
Добавьте этот код в классы для pdf
Свернутый текст


function brCell($w, $h, $txt,$border=0,$inl=0,$align='J', $fill=false,$dop=false)
{


//Output text with automatic or explicit line breaks
$border2=$border;
$cw=&$this->CurrentFont['cw'];
if($w==0)
$w=$this->w-$this->rMargin-$this->x;
$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
$s=str_replace("\r",'',$txt);
$nb=strlen($s);
if($nb>0 && $s[$nb-1]=="\n")
$nb--;
$b=0;
if($border)
{
if($border==1)
{
$border='LTRB';
$b='LRT';
$b2='LR';
}
else
{
$b2='';
if(strpos($border,'L')!==false)
$b2.='L';
if(strpos($border,'R')!==false)
$b2.='R';
$b=(strpos($border,'T')!==false) ? $b2.'T' : $b2;
}
}

$sep=-1;
$i=0;
$j=0;
$l=0;
$tus=0; // для вычесления процентов
$ns=0;
$nl=1;
while($i<$nb)
{
//Get next character
$c=$s[$i];
if($c=="\n") //если есть перенос строки
{
//Explicit line break
if($this->ws>0)
{
// $this->ws=0;
// $this->_out('0 Tw');

}
$text_1[]=substr($s,$j,$i-$j);
//$this->Cell($w,$h,substr($s,$j,$i-$j).'a',$b,0,$align,$fill);
$i++;
$sep=-1;
$j=$i;
$l=0;
$ns=0;
$nl++;
if($border && $nl==2)
$b=$b2;
continue;
}
$tus+=$cw[$c]; // для вычесления процентов
$proz=round((round($tus)*100)/intval($wmax)); //вычесляем сколько процентов заполнено в строке от максимальной длинны
if($c==' ' && $proz > 80) //если есть пробел и строка заполнена больше 80%
{
$sep=$i;
$ls=$l;
$ns++;
}
$l+=$cw[$c];
if($l>$wmax) // если число строк превышает длинну столбца
{
//Automatic line break
if($sep==-1) // если нет пробела
{
if($i==$j)
$i++;
if($this->ws>0)
{
// $this->ws=0;
// $this->_out('0 Tw');

}
$text_1[]=substr($s,$j,$i-$j);
// $this->Cell($w,$h,substr($s,$j,$i-$j).'b',$b,0,$align,$fill);
}
else // если пробел есть
{
if($align=='J')
{
// $this->ws=($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0;
// $this->_out(sprintf('%.3F Tw',$this->ws*$this->k));

}
$text_1[]=substr($s,$j,$sep-$j);
//$this->Cell($w,$h,substr($s,$j,$sep-$j).'v',$b,0,$align,$fill);
$i=$sep+1;
}
$sep=-1;
$j=$i;
$l=0;
$ns=0;
$nl++;
if($border && $nl==2)
$b=$b2;
}
else
$i++;
}
//Last chunk
if($this->ws>0)
{
// $this->ws=0;
// $this->_out('0 Tw');

}

$text_2=""; // для текста
$height=1; // добавочная высота
if(isset($text_1))
{
for($ghj=0;$ghj < count($text_1);$ghj++) { $text_2.=$text_1[$ghj]."\n"; $height++; } // собераем текст
}
$height=round($this->FontSize+$this->h_font)*$height+2; // даём размер рамки в соотвествии от размера шрифта
if($dop) $height+=$dop; // доп размер
// $this->Cell($w,$heig,$text_2.substr($s,$j,$i-$j),$border2,$inl,$align,$fill); // последняя строка


$res=array("height"=>$height,"text"=>$text_2.substr($s,$j,$i-$j));


return $res;
}




function groupCell($mass)
{
$height=0;
foreach ($mass as $key=>$value)
{
if(!isset($value[3])) $value[3] = 0;
if(!isset($value[4])) $value[4] = 0;
if(!isset($value[5])) $value[5] = 'l';
if(!isset($value[6])) $value[6] = false;
if(!isset($value[7])) $value[7] = false; // доп.размер
$in=$this->brCell($value[0],$value[1],$value[2],$value[3],$value[4],$value[5],$value[6],$value[7]); // узнать результаты у функции brCell
$heig[]=$in['height']; // берём высоту
$mass[$key][2]=$in['text']; // перебиваем текст
}

$max_heig=0;
for($i=0;$i < count($heig);$i++)
{ if($heig[$i] > $max_heig) $max_heig=$heig[$i]; } // берём максимальноую высоту

foreach ($mass as $key=>$value)
{
if($value[1]=='') $heig2=$max_heig; else $heig2=$value[1]; // если задано высота то её в первую очередь
if(!isset($value[3])) $value[3] = 0;
if(!isset($value[4])) $value[4] = 0;
if(!isset($value[5])) $value[5] = 'l';
if(!isset($value[6])) $value[6] = false;

$this->Cell($value[0],$heig2,$value[2],$value[3],$value[4],$value[5],$value[6]); // выдаём результаты
}

}



Пример использования.
$text=$pdf->brCell(10,'','наш текст намного длинне и его надо перевести на новые строки',1,1,'C',false,5);
последний параметр это доп размер рамки , если нужно.
В результате получаете массив $text, где $text['text']='текст с переводом строк';
$text['height']='нужная высота для рамки'; дальше
$this->Cell(10,$text['height'],$text['text'],1,1,'C');


пример создания табличек
$mas[]=array(10,'','наш текст намного длинне и его надо перевести на новые строки',1,0); // такие же памаметры как у cell не указываем высоту если укажите то она не измениться
$mas[]=array(10,'','наш второй который увеличит и первую табличку, текст намного длинне и его надо перевести на новые строки',1,0);
$pdf->groupCell($mas);

Спустя 49 минут, 47 секунд (10.02.2010 - 14:57) zvezda_t написал(а):
в функции brCell()
ругается на строчку:

$height=round($this->FontSize+$this->h_font)*$height+2; // даём размер рамки в соотвествии от размера шрифта



Notice: Undefined property: dctPDF::$h_font in

Спустя 7 минут, 17 секунд (10.02.2010 - 15:05) Gradus написал(а):
$height=$this->FontSize*$height+2; 

Спустя 4 минуты, 26 секунд (10.02.2010 - 15:09) zvezda_t написал(а):
оставила так:

$height=round($this->FontSize)*$height+2; // даём размер рамки в соотвествии от размера шрифта


В результате вывод:

Две узкие виртикальные ячейки, а по их центру в одну строчку текст,выходящий за пределы ячеек, с наложением друг на друга((

Спустя 3 минуты, 29 секунд (10.02.2010 - 15:13) Gradus написал(а):
покажите как применили их

Спустя 7 минут, 55 секунд (10.02.2010 - 15:21) zvezda_t написал(а):
Ваш пример как дали пыталась вывести:

$mas[]=array(10,'','наш текст намного длинне и его надо перевести на новые строки',1,0); // такие же памаметры как у cell не указываем высоту если укажите то она не измениться
$mas[]=array(10,'','наш второй который увеличит и первую табличку, текст намного длинне и его надо перевести на новые строки',1,0);
$pdf->groupCell($mas);

Спустя 8 минут, 49 секунд (10.02.2010 - 15:29) Gradus написал(а):
хм... вот что у меня получилось
user posted image
посмотрите ещё функцию cell
Свернутый текст

function Cell($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='')
{
//$txt=str_replace(chr(13),'',$txt); // \r заменяем на пустоту
//Output a cell

$k=$this->k;

if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
{
$x=$this->x;
$ws=$this->ws;
if($ws>0)
{
$this->ws=0;
$this->_out('0 Tw');
}
$this->AddPage($this->CurOrientation,$this->CurPageFormat);
$this->x=$x;
if($ws>0)
{
$this->ws=$ws;
$this->_out(sprintf('%.3f Tw',$ws*$k));
}

}

if($w==0)
$w=$this->w-$this->rMargin-$this->x;
$s='';
// begin change Cell function 12.08.2003
if($fill==1 or $border>0)
{
if($fill==1)
$op=($border>0) ? 'B' : 'f';
else
$op='S';
if ($border>1) {
$s=sprintf(' q %.2f w %.2f %.2f %.2f %.2f re %s Q ',$border,
$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op);
}
else
$s=sprintf('%.2f %.2f %.2f %.2f re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op);
}
if(is_string($border))
{
$x=$this->x;
$y=$this->y;
if(is_int(strpos($border,'L')))
$s.=sprintf('%.2f %.2f m %.2f %.2f l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);
else if(is_int(strpos($border,'l')))
$s.=sprintf('q 2 w %.2f %.2f m %.2f %.2f l S Q ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);

if(is_int(strpos($border,'T')))
$s.=sprintf('%.2f %.2f m %.2f %.2f l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);
else if(is_int(strpos($border,'t')))
$s.=sprintf('q 2 w %.2f %.2f m %.2f %.2f l S Q ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);

if(is_int(strpos($border,'R')))
$s.=sprintf('%.2f %.2f m %.2f %.2f l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
else if(is_int(strpos($border,'r')))
$s.=sprintf('q 2 w %.2f %.2f m %.2f %.2f l S Q ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k);

if(is_int(strpos($border,'B')))
$s.=sprintf('%.2f %.2f m %.2f %.2f l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
else if(is_int(strpos($border,'b')))
$s.=sprintf('q 2 w %.2f %.2f m %.2f %.2f l S Q ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
}
if (trim($txt)!='') {
$cr=substr_count($txt,"\n");
if ($cr>0) { // Multi line
preg_match_all("/<font color=\"#(\S+)\">(.*)<\/font>/iUs",$txt,$r);
if(count($r[0])>0)
{ $txt2=$txt;
foreach($r[0] as $key=>$v)
{
$txt2=str_replace($v,') Tj ET q '.$this->conv_color($r[1][$key]).' ('.$r[2][$key].') Tj ET q '.$this->TextColor.' (',$txt2);
$txt=str_replace($v,$r[2][$key],$txt);
}
//print_r ($txt2);
}
$txts = explode("\n", $txt);
if($txt2) $txts2 = explode("\n", $txt2);
$lines = count($txts);
//$dy=($h-2*$this->cMargin)/$lines;
for($l=0;$l<$lines;$l++) {
$txt=$txts[$l];
if($txt2) $txt2=$txts2[$l];
$w_txt=$this->GetStringWidth($txt);
if($align=='R')
$dx=$w-$w_txt-$this->cMargin;
elseif($align=='C')
$dx=($w-$w_txt)/2;
else
$dx=$this->cMargin;

$txt=str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txt)));
if($this->ColorFlag)
$s.='q '.$this->TextColor.' ';
$s.=$gar=sprintf('BT %.2f %.2f Td (%s) Tj ET ',
(
$this->x+$dx)*$k,
(
$this->h-($this->y+.5*$h+(.7+$l-$lines/2)*($this->FontSize+$this->h_font)))*$k,
(
isset($txt2)?$txt2:$txt));
// print_r ($s);
if($this->strikeline)
$s.=' '.$this->_strikeline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
if($this->underline)
$s.=' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
if($this->ColorFlag)
$s.=' Q ';
if($link)
$this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$w_txt,$this->FontSize,$link);
}

}

else { // Single line
$w_txt=$this->GetStringWidth($txt);
$Tz=100;
/*commented*/
/*
if ($w_txt>$w-2*$this->cMargin) { // Need compression
$Tz=($w-2*$this->cMargin)/$w_txt*100;
$w_txt=$w-2*$this->cMargin;
}
*/

if($align=='R')
$dx=$w-$w_txt-$this->cMargin;
elseif($align=='C')
$dx=($w-$w_txt)/2;
else
$dx=$this->cMargin;
$txt=str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txt)));
if($this->ColorFlag)
$s.='q '.$this->TextColor.' ';
$s.=sprintf('q BT %.2f %.2f Td %.2f Tz (%s) Tj ET Q ',
(
$this->x+$dx)*$k,
(
$this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,
$Tz,$txt);
if($this->strikeline)
$s.=' '.$this->_strikeline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
if($this->underline)
$s.=' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
if($this->ColorFlag)
$s.=' Q ';
if($link)
$this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$w_txt,$this->FontSize,$link);
}
}

// end change Cell function 12.08.2003
if($s)
$this->_out($s);
$this->lasth=$h;
if($ln>0)
{
//Go to next line
$this->y+=$h;
if($ln==1)
$this->x=$this->lMargin;
}
else
$this->x+=$w;
}


Спустя 23 минуты, 19 секунд (10.02.2010 - 15:53) zvezda_t написал(а):
такой же эффект

У меня вместо переноса на следущую строку печатается символ "маленький квадратик" и переносов нет

Спустя 4 минуты, 55 секунд (10.02.2010 - 15:58) zvezda_t написал(а):
кстати, я когда просто в $text1 для функции MultiCell(180,5,$text1,1,'L'); вставляла символ "\n" - переноса не было((( а он прям так и печатался "\n" в тексте.
почему так?

Спустя 6 минут, 23 секунды (10.02.2010 - 16:04) Gradus написал(а):
Цитата
У меня вместо переноса на следущую строку печатается символ "маленький квадратик" и переносов нет

вмето нажатия клавиши enter пишите \n.
Цитата
почему так?

дело в том что одинарные ковычки не понимают спец знаков , переменных и т.п. они просто видят текст в отличие от двойных.Специфика...

Спустя 3 часа, 43 минуты, 17 секунд (10.02.2010 - 19:47) zvezda_t написал(а):
В Вашем примере тоже двойные кавычки нужно поставить?

Спустя 3 часа, 21 минута, 6 секунд (10.02.2010 - 23:08) Gradus написал(а):
должно быть без разницы.А нет проблем если вы напишите ?
$pdf->cell(20,5,\nе\rк\r\nст",0,0);

Спустя 8 часов, 21 минута, 36 секунд (11.02.2010 - 07:30) zvezda_t написал(а):

$pdf->cell(20,5,\nе\rк\r\nст",0,0);


Есть проблемы! Вывод в одну строчку:

т"маленький квадратик"е"маленький квадратик"к"маленький квадратик"ст

Спустя 3 минуты, 52 секунды (11.02.2010 - 07:34) zvezda_t написал(а):
а вот если

$pdf->MultiCell(90,5,\nе\rк\r\nст",0,'L');


то так:

т
ек
ст

Спустя 9 минут, 33 секунды (11.02.2010 - 07:43) zvezda_t написал(а):
поэкспериментировала...

в функции groupCell($mass)
заменила:

$this->Cell($value[0],$heig2,$value[2],$value[3],$value[4],$value[5],$value[6]); // выдаём результаты


на

$this->MultiCell($value[0],$heig2,$value[2],$value[3],$value[4],$value[5],$value[6]); // выдаём результаты


и сделала вызов:

$mas[]=array(10,'','наш текст намного длинне и его надо перевести на новые строки',1,0); // такие же памаметры как у cell не указываем высоту если укажите то она не измениться
$mas[]=array(10,'','наш второй который увеличит и первую табличку, текст намного длинне и его надо перевести на новые строки',1,0);
$pdf->groupCell($mas);



В результате вывод на несколько страниц! На каждой странице нарисован столбец, причем на первой странице в него вставлено слово "наш", на второй "текс", на третий "т" и т.д.
sad.gif

Спустя 2 часа, 51 минута (11.02.2010 - 10:34) Gradus написал(а):
не надо в groupCell ничего менять.Как то плохо у вас fpdf пашет, попробуйте мой cell поставить я в этой теме выкладывал.

Спустя 7 минут, 34 секунды (11.02.2010 - 10:42) zvezda_t написал(а):
так я Ваш Cell и добавляла! не помогло(

Спустя 11 минут, 53 секунды (11.02.2010 - 10:54) zvezda_t написал(а):
куча ошибок выходит:

Notice: Undefined variable: txt2

Notice: Undefined variable: txt2

Notice: Undefined property: dctPDF::$h_font

Notice: Undefined property: dctPDF::$strikeline

Notice: Undefined variable: txt2

Notice: Undefined property: dctPDF::$h_font

Notice: Undefined property: dctPDF::$strikeline
Notice: Undefined variable: txt2
Notice: Undefined property: dctPDF::$h_font

Notice: Undefined property: dctPDF::$strikeline

Спустя 1 минута, 42 секунды (11.02.2010 - 10:56) Gradus написал(а):
странно возможно проблема в шрифтах,какая версия у вас ? у мну 1.6
Цитата
куча ошибок выходит:

да это нотисы всего лиш, удалит переменные или error_reporting(0);

Спустя 1 час, 27 минут, 7 секунд (11.02.2010 - 12:23) zvezda_t написал(а):
у меня тоже 1.6
я для добавления кириллицы пользовалась :ttf2pt1 и файлом шрифта times(С:\WINDOWS\Fonts)
в итоге получила шрифт - TimesNewRomanPSMT

Спустя 28 минут, 33 секунды (11.02.2010 - 12:51) Gradus написал(а):
не факт что правильно конвертация и интегрирование прошло.
А с ариал шрифтом так же ?

Спустя 58 минут, 54 секунды (11.02.2010 - 13:50) zvezda_t написал(а):
c Arial, квадратики не печатает, а сжимает слово сильно, с наложением печатает, без переносов.

Спустя 4 минуты, 48 секунд (11.02.2010 - 13:55) zvezda_t написал(а):
Я создала вроде свой класс, использую MultiCell(), потом (Как Вы говорили)
$this->SetXY($px+$h, $py);

и рядом вывожу вторую MultiCell(), задем делаю нужный отступ вниз и повторяю...
Получается таблица из двух колонок произвольной высоты.

Возникла проблема.
Если лист полностью заполнен, при переходе на следущий лист начинаются сильные смещения координат и не адекватный вывод, таблица разбивается на колоночки и растягивается на три листа(((

Что с этим можно сделать?
sad.gif sad.gif sad.gif

Спустя 12 минут, 58 секунд (11.02.2010 - 14:08) Gradus написал(а):
вам придёться дописывать класс.Используя функцию определения листа.Если перенос на новый лист то делать новые координаты

Спустя 7 минут, 5 секунд (11.02.2010 - 14:15) zvezda_t написал(а):
Дело в том, что Высоту ячейки таблицы, я узнаю, только после того, как её вывиду...
В отличии от Вашего метода, как я поняла, Вы же измеряли длинну выводимого текста, а потом уже устанавливали нужную высоту ячейки.

С моим методом есть шансы?
blink.gif

Спустя 12 минут, 25 секунд (11.02.2010 - 14:27) Gradus написал(а):
если узнаёте только после вывода , то думаю нет.
С моим cell я так понимаю у вас тоже квадратики.
Попробуйте тогда другой fpdf скачать , скорее всего проблема в шрифтах

Спустя 4 минуты, 2 секунды (11.02.2010 - 14:31) zvezda_t написал(а):
А если выводить, узнавать ширину, менять координаты и возвращаться в начало метода используя оператор GoTo [(оператор) - передает управление определенной строке подпрограммыбез возврата контроля]

так можно?

такой оператор есть в php?


Спустя 9 месяцев, 4 дня, 7 часов, 49 минут, 2 секунды (15.11.2010 - 22:20) Давка написал(а):
Скрытый текст
Хидо


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.