<?php
define('FPDF_FONTPATH','font/');
require('fpdf.php');
class PDF extends FPDF
{
function PDF()
{
$this->FPDF();
}
function toLetters($a){
if($a<27){
return strtoupper(chr($a+96));
}else{
while($a > 26){
$b++;
$a = $a-26;
}
$b = strtoupper(chr($b+96));
$a = strtoupper(chr($a+96));
return $b.$a;
}
}
function put_img($x,$y,$imageWith,$imagePath,$dpi='72',$url='') {
$imgSize = getimagesize($imagePath);
$imgRatio = $imgSize[0] / $imageWith;
$outWidth = ($imgSize[0]/($imgRatio));
$outHeight = ($imgSize[1]/($imgRatio));
$this->Image($imagePath,$x,$y,$outWidth,$outHeight,'',$url);
$this->SetY($y+$outHeight);
}
function hex2rgb($hex) {
$color = str_replace('#','',$hex);
$rgb = array('r' => hexdec(substr($color,0,2)),
'g' => hexdec(substr($color,2,2)),
'b' => hexdec(substr($color,4,2)));
return $rgb;
}
function Footer()
{
global $title,$author,$sitename,$siteUrl,$lang,$indice,$font;
//Position at 1.5 cm from bottom
$this->SetY(-15);
//$fuente italic 8
$this->SetFont($font,'I',8);
//Text color in gray
$this->SetTextColor(128);
//Page number
$this->Write(10,"$sitename","$siteUrl");
$this->SetY(-15);
if($lang=="En") {
$t_page = "Page";
$t_by = "by";
$t_back = "Back to index";
} elseif($lang=="Sp") {
$t_page = "Página";
$t_by = "Por";
$t_back = "Volver al índice";
}
$this->Cell(0,10,$title." | $t_by ".$author." | $t_page ".$this->PageNo(),0,0,'R');
}
/* CellFitScale */
//Cell with horizontal scaling if text is too wide
function CellFit($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='',$scale=0,$force=1)
{
//Get string width
$str_width=($this->GetStringWidth($txt)>0)?$this->GetStringWidth($txt):1;
//Calculate ratio to fit cell
if($w==0)
$w=$this->w-$this->rMargin-$this->x;
$ratio=($w-$this->cMargin*2)/$str_width;
$fit=($ratio < 1 || ($ratio > 1 && $force == 1));
if ($fit)
{
switch ($scale)
{
//Character spacing
case 0:
//Calculate character spacing in points
$char_space=($w-$this->cMargin*2-$str_width)/max($this->MBGetStringLength($txt)-1,1)*$this->k;
//Set character spacing
$this->_out(sprintf('BT %.2f Tc ET',$char_space));
break;
//Horizontal scaling
case 1:
//Calculate horizontal scaling
$horiz_scale=$ratio*100.0;
//Set horizontal scaling
$this->_out(sprintf('BT %.2f Tz ET',$horiz_scale));
break;
}
//Override user alignment (since text will fill up cell)
$align='';
}
//Pass on to Cell method
$this->Cell($w,$h,$txt,$border,$ln,$align,$fill,$link);
//Reset character spacing/horizontal scaling
if ($fit)
$this->_out('BT '.($scale==0 ? '0 Tc' : '100 Tz').' ET');
}
//Cell with horizontal scaling only if necessary
function CellFitScale($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='')
{
$this->CellFit($w,$h,$txt,$border,$ln,$align,$fill,$link,1,0);
}
//Cell with horizontal scaling always
function CellFitScaleForce($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='')
{
$this->CellFit($w,$h,$txt,$border,$ln,$align,$fill,$link,1,1);
}
//Cell with character spacing only if necessary
function CellFitSpace($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='')
{
$this->CellFit($w,$h,$txt,$border,$ln,$align,$fill,$link,0,0);
}
//Cell with character spacing always
function CellFitSpaceForce($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='')
{
//Same as calling CellFit directly
$this->CellFit($w,$h,$txt,$border,$ln,$align,$fill,$link,0,1);
}
//Patch to also work with CJK double-byte text
function MBGetStringLength($s)
{
if($this->CurrentFont['type']=='Type0')
{
$len = 0;
$nbbytes = strlen($s);
for ($i = 0; $i < $nbbytes; $i++)
{
if (ord($s[$i])<128)
$len++;
else
{
$len++;
$i++;
}
}
return $len;
}
else
return strlen($s);
}
function WordWrap(&$text, $maxwidth)
{
$text = trim($text);
if ($text==='')
return 0;
$space = $this->GetStringWidth(' ');
$lines = explode("\n", $text);
$text = '';
$count = 0;
foreach ($lines as $line)
{
$words = preg_split('/ +/', $line);
$width = 0;
foreach ($words as $word)
{
$wordwidth = $this->GetStringWidth($word);
if ($width + $wordwidth <= $maxwidth)
{
$width += $wordwidth + $space;
$text .= $word.' ';
}
else
{
$width = $wordwidth + $space;
$text = rtrim($text)."\n".$word.' ';
$count++;
}
}
$text = rtrim($text)."\n";
$count++;
}
$text = rtrim($text);
return $count;
}
function CreaIndex($title,$author,$chapters,$subchap,$subitem,$images,$text,$lang,$num_type){
global $font,$siteUrl,$sitename;
$ftype = '';
if($lang=="En") {
$t_by = "by";
$t_created = "This publication was created by verboMagia";
$t_index = "Index";
} elseif($lang=="Sp") {
$t_by = "Por";
$t_created = "Esta publicación ha sido generada con verboMagia";
$t_index = "Índice";
}
// Título
$this->SetY(70);
$this->SetFont($font,'',30);
$this->MultiCell(0,15,$title,0,'C',0);
// Autor
$this->SetFont($font,'',18);
$this->MultiCell(0,5,"$t_by ".$author,0,'C',0);
$this->put_img(80,100,50,"logo.png",72,"http://your.url");
// Creador
$this->SetY(200);
$this->SetTextColor(128);
$this->SetFont($font,'',11);
$this->Cell($this->w-20,5,"$t_created:",0,1,'C');
$this->Ln(28);
//$this->AddFont('dutch');
$this->SetFont('arial',$ftype,65);
$rgb = $this->hex2rgb('c02afd');
$this->SetTextColor($rgb['r'],$rgb['g'],$rgb['b']);
$this->SetXY(10,220);
$this->CellFitScale(95,17,'verbo',0,1,'R',0,"$siteUrl");
$rgb = $this->hex2rgb('006e01');
$this->SetTextColor($rgb['r'],$rgb['g'],$rgb['b']);
$this->SetXY(105,220);
$this->CellFitScale(85,17,'magia',0,1,'L',0,"$siteUrl");
$this->SetTextColor(128);
$this->SetX(75);
$this->SetFont($font,'I',12);
$this->Write(5,$sitename,"$siteUrl");
$this->SetFont($font,'',20);
$this->SetTextColor(0);
$this->AddPage();
//Index title
$indice=$this->AddLink();
$this->SetFontSize(20);
$this->SetLink($indice);
$this->Cell(0,5,"$t_index",0,1,'C');
if($font=="Courier") {
$wide_i = 24;
$wide_j = 29;
$wide_k = 34;
} else {
$wide_i = 19;
$wide_j = 24;
$wide_k = 29;
}
$this->SetFontSize(12);
$this->Ln(10);
for($i=0; $i < count($chapters); $i++) {
$strsize=$this->GetStringWidth($chapters[$i]);
//Link Chapter
$link[$i]=$this->AddLink();
if($num_type=="num") {
$t_num = ($i+1);
} elseif($num_type=="let") {
$t_num = strtolower($this->toLetters($i+1));
}
$this->SetX(10);
$strsize_t_num=$this->GetStringWidth($t_num);
//Filling dots
$w=$this->w-$this->rMargin-($strsize+$wide_i+$strsize_t_num);
if($w < 1) $nb = 1;
else $nb=$w/$this->GetStringWidth('.');
$dots=str_repeat('.',$nb);
$this->Write(6,$t_num." ".$dots." ".$chapters[$i],$link[$i]); // Chapters
$this->Ln(6);
for($j=0; $j < count($subchap[$i]); $j++) {
//Link Sub Chapter
$link_sub[$i][$j]=$this->AddLink();
$strsize_sub=$this->GetStringWidth($subchap[$i][$j]);
if(!$subchap[$i][$j]) { } else {
$this->SetX(15);
if($num_type=="num") {
$t_sub_num = ($i+1).".".($j+1);
} elseif($num_type=="let") {
$t_sub_num = strtolower($this->toLetters($i+1)).".".strtolower($this->toLetters($j+1));
}
$strsize_t_sub_num=$this->GetStringWidth($t_sub_num);
$w_sub=$this->w-$this->rMargin-($strsize_sub+$wide_j+$strsize_t_sub_num);
if($w_sub < 1) $nb_sub = 1;
else $nb_sub=$w_sub/$this->GetStringWidth('.');
$dots_sub=str_repeat('.',$nb_sub);
$this->Write(6,$t_sub_num." ".$dots_sub." ".$subchap[$i][$j],$link_sub[$i][$j]); // Sub Chapters
$this->Ln(6);
for($k=0; $k < count($subitem[$i][$j]); $k++) {
//Link Sub Chapter
$link_sub_item[$i][$j][$k]=$this->AddLink();
$strsize_sub_item=$this->GetStringWidth($subitem[$i][$j][$k]);
if(!$subitem[$i][$j][$k]) { } else {
$this->SetX(20);
if($num_type=="num") {
$t_sub_item_num = ($i+1).".".($j+1).".".($k+1);
} elseif($num_type=="let") {
$t_sub_item_num = strtolower($this->toLetters($i+1)).".".strtolower($this->toLetters($j+1)).".".strtolower($this->toLetters($k+1));
}
$strsize_t_sub_item_num=$this->GetStringWidth($t_sub_item_num);
$w_sub_item=$this->w-$this->rMargin-($strsize_sub_item+$wide_k+$strsize_t_sub_item_num);
if($w_sub_item < 1) $nb_sub_item = 1;
else $nb_sub_item=$w_sub_item/$this->GetStringWidth('.');
$dots_sub_item=str_repeat('.',$nb_sub_item);
$this->Write(6,$t_sub_item_num." ".$dots_sub_item." ".$subitem[$i][$j][$k],$link_sub_item[$i][$j][$k]); // Sub Items
$this->Ln(6);
}
}
}
}
}
$this->show_chapters($chapters,$subchap,$subitem,$images,$text,$link,$link_sub,$link_sub_item,$indice,$lang,$num_type);
}
function show_chapters($chapters,$subchap,$subitem,$images,$text,$link,$link_sub,$link_sub_item,$indice,$lang,$num_type) {
global $font;
if($lang=="En") {
$t_back = "Back to index";
} elseif($lang=="Sp") {
$t_back = "Volver al índice";
}
for($i=0; $i < count($chapters); $i++) {
if($num_type=="num") {
$t_num = ($i+1);
} elseif($num_type=="let") {
$t_num = strtolower($this->toLetters($i+1));
}
//Pages
$this->AddPage();
$this->SetFontSize(20);
$this->SetLink($link[$i]);
$this->Write(8,$t_num.". ".$chapters[$i],$indice);
$this->Ln(15);
for($j=0; $j < count($subchap[$i]); $j++) {
if($num_type=="num") {
$t_sub_num = ($i+1).".".($j+1);
} elseif($num_type=="let") {
$t_sub_num = strtolower($this->toLetters($i+1)).".".strtolower($this->toLetters($j+1));
}
$this->SetLink($link_sub[$i][$j]);
$this->SetFontSize(18);
if(!$subchap[$i][$j]) { } else {
$this->MultiCell(0,8,$t_sub_num.". ".$subchap[$i][$j],0,1);
}
$this->Ln(4);
for($k=0; $k < count($subitem[$i][$j]); $k++) {
if($num_type=="num") {
$t_sub_item_num = ($i+1).".".($j+1).".".($k+1);
} elseif($num_type=="let") {
$t_sub_item_num = strtolower($this->toLetters($i+1)).".".strtolower($this->toLetters($j+1)).".".strtolower($this->toLetters($k+1));
}
$this->SetLink($link_sub_item[$i][$j][$k]);
$this->SetFontSize(15);
if(!$subitem[$i][$j][$k]) { } else {
$this->MultiCell(0,7,$t_sub_item_num.". ".$subitem[$i][$j][$k],0,1);
}
$this->Ln(2);
$curY = $this->GetY();
$this->put_img(80,($curY+5),$images[$i][$j][$k]['width'],$images[$i][$j][$k]['file'],$images[$i][$j][$k]['dpi'],$images[$i][$j][$k]['url']);
$this->SetFontSize(12);
$this->Write(5,$text[$i][$j][$k]);
$this->Ln(8);
}
$this->Ln(8);
}
}
}
}
$tapp = "myob";
$version = "1.3.2";
$sitename = 'verbo magia';
$siteUrl = 'http://your.server.domain';
$t_site = "$sitename - $tapp $version";
$font = 'arial';
$title = 'Book Title';
$author = 'Luciano Salvino';
$chap = array(
'Chapter 1',
'Chapter 2',
'Chapter 3',
);
$subchap = array(
array('Sub-Chapter 1.1'),
array('Sub-Chapter 2.1','Sub-Chapter 2.2'),
array('Sub-Chapter 3.1'),
);
$subitem = array(
array(
array('Sub-Item 1.1.1'),
),
array(
array('Sub-Item 2.1.1'),
array('Sub-Item 2.2.1'),
),
array(
array('Sub-Item 3.1.1','Sub-Item 3.1.2','Sub-Item 3.1.3'),
),
);
$images = array(
array(
array(
array(
'file'=>'logo.png',
'width'=>50,
'dpi'=>72,
'url'=>'http://your.url'
)
),
),
array(
array(
array(
'file'=>'logo.png',
'width'=>50,
'dpi'=>72,
'url'=>'http://your.url'
)
),
array(
array(
'file'=>'logo.png',
'width'=>50,
'dpi'=>72,
'url'=>'http://your.url'
)
),
),
array(
array(
array(
'file'=>'logo.png',
'width'=>50,
'dpi'=>72,
'url'=>'http://your.url',
),
array(
'file'=>'logo.png',
'width'=>50,
'dpi'=>72,
'url'=>'http://your.url'
),
array(
'file'=>'logo.png',
'width'=>50,
'dpi'=>72,
'url'=>'http://your.url'
)
),
),
);
$text = array(
array(
array(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum',
),
),
array(
array(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum',
),
array(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum',
),
),
array(
array(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum',
),
),
);
$arrLang = array('En','Sp');
$arrNumType = array('num','let');
$lang = $arrLang[0];
$num_type = $arrNumType[1];
$pdf = new PDF( '$p_orient', 'mm', '$p_size' );
$pdf->Open();
$pdf->SetTitle($title);
$pdf->SetAuthor($author);
$pdf->SetCreator($t_site);
$pdf->SetFont($font,'',15);
$pdf->AddPage();
$pdf->CreaIndex($title,$author,$chap,$subchap,$subitem,$images,$text,$lang,$num_type);
$pdf->Output();
|