millimeter in 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 extends FPDF { //variables of html parser protected $B; protected $I; protected $U; protected $HREF; protected $fontList; protected $issetfont; protected $issetcolor; function __construct($orientation='P', $unit='mm', $format='A4') { //Call parent constructor parent::__construct($orientation,$unit,$format); //Initialization $this->B=0; $this->I=0; $this->U=0; $this->HREF=''; $this->tableborder=0; $this->tdbegin=false; $this->tdwidth=0; $this->tdheight=0; $this->tdalign="L"; $this->tdbgcolor=false; $this->oldx=0; $this->oldy=0; $this->fontlist=array("arial","times","courier","helvetica","symbol"); $this->issetfont=false; $this->issetcolor=false; } ////////////////////////////////////// //html parser function WriteHTML($html) { $html=strip_tags($html,"



"); //remove all unsupported tags $html=str_replace("\n",'',$html); //replace carriage returns with spaces $html=str_replace("\t",'',$html); //replace carriage returns with spaces $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); //explode the string foreach($a as $i=>$e) { if($i%2==0) { //Text if($this->HREF) $this->PutLink($this->HREF,$e); elseif($this->tdbegin) { if(trim($e)!='' && $e!=" ") { $this->Cell($this->tdwidth,$this->tdheight,$e,$this->tableborder,'',$this->tdalign,$this->tdbgcolor); } elseif($e==" ") { $this->Cell($this->tdwidth,$this->tdheight,'',$this->tableborder,'',$this->tdalign,$this->tdbgcolor); } } 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 'SUP': if( !empty($attr['SUP']) ) { //Set current font to 6pt $this->SetFont('','',6); //Start 125cm plus width of cell to the right of left margin //Superscript "1" $this->Cell(2,2,$attr['SUP'],0,0,'L'); } break; case 'TABLE': // TABLE-BEGIN if( !empty($attr['BORDER']) ) $this->tableborder=$attr['BORDER']; else $this->tableborder=0; break; case 'TR': //TR-BEGIN break; case 'TD': // TD-BEGIN if( !empty($attr['WIDTH']) ) $this->tdwidth=($attr['WIDTH']/4); else $this->tdwidth=40; // Set to your own width if you need bigger fixed cells if( !empty($attr['HEIGHT']) ) $this->tdheight=($attr['HEIGHT']/6); else $this->tdheight=6; // Set to your own height if you need bigger fixed cells if( !empty($attr['ALIGN']) ) { $align=$attr['ALIGN']; if($align=='LEFT') $this->tdalign='L'; if($align=='CENTER') $this->tdalign='C'; if($align=='RIGHT') $this->tdalign='R'; } else $this->tdalign='L'; // Set to your own if( !empty($attr['BGCOLOR']) ) { $coul=hex2dec($attr['BGCOLOR']); $this->SetFillColor($coul['R'],$coul['G'],$coul['B']); $this->tdbgcolor=true; } $this->tdbegin=true; break; case 'HR': if( !empty($attr['WIDTH']) ) $Width = $attr['WIDTH']; else $Width = $this->w - $this->lMargin-$this->rMargin; $x = $this->GetX(); $y = $this->GetY(); $this->SetLineWidth(0.2); $this->Line($x,$y,$x+$Width,$y); $this->SetLineWidth(0.2); $this->Ln(1); break; 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 '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['G'],$coul['B']); $this->issetcolor=true; } if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist)) { $this->SetFont(strtolower($attr['FACE'])); $this->issetfont=true; } if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist) && isset($attr['SIZE']) && $attr['SIZE']!='') { $this->SetFont(strtolower($attr['FACE']),'',$attr['SIZE']); $this->issetfont=true; } break; } } function CloseTag($tag) { //Closing tag if($tag=='SUP') { } if($tag=='TD') { // TD-END $this->tdbegin=false; $this->tdwidth=0; $this->tdheight=0; $this->tdalign="L"; $this->tdbgcolor=false; } if($tag=='TR') { // TR-END $this->Ln(); } if($tag=='TABLE') { // TABLE-END $this->tableborder=0; } 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 $conversers=[]; $iconverser=0; $trow=''; $thtml='
cell 1cell 2
'; $phpcont=''; $one=""; $two=""; $three=""; $four=""; $nextone=1; $innards=""; $title=" ... "; $emailto=""; $aspdf=""; $gats="Got anything to say?"; foreach( $_GET as $name=>$val ) { if ($one == "") { $one=str_replace("+", " ", urldecode($val)); if (strpos($one, "@") !== false) { if (strpos($one, "<") !== false) { $inf=explode("<", $one)[0]; $xinf=explode("<", $one)[1]; if ($inf != '') { $conversers=explode(" ", trim($inf)); } $one=explode(">", $xinf)[0]; } if ($one != strtoupper($one) && $one != strtolower($one)) { $aspdf="y"; $emailto=strtolower($one); } else if (sizeof($conversers) > 0) { $aspdf="Y"; $emailto=$one; } else { $emailto=$one; } } else { $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } } else if ($two == "") { $two=str_replace("+", " ", urldecode($val)); if (strpos($two, " ... |") !== false) { $one=""; $fields=explode("|", explode("... |", $two)[1]); $two=""; $gats.=" You can email to an entered email address what you have so far, and mixing the case here also outputs a PDF form of the conversation. A pseudo email address of a form like Leo Max would email rmetcalfe15@gmail.com HTML and PDF attachments, the PDF tabular look indicating that the conversation was between Leo and Max. "; for ($ii=0; $ii 0) { $thtml=str_replace('',str_replace('cell 2', $fields[$ii], str_replace('cell 1', $conversers[($iconverser % sizeof($conversers))] . ' says ...', $trow)) . '', $thtml); $iconverser++; } else { $thtml=str_replace('',str_replace('cell 2', $fields[$ii], str_replace('cell 1', $nextone, $trow)) . '', $thtml); } } $innards.="\nform.append('infld" . $nextone . "', \"" . $fields[$ii] . "\");\n"; $title.="|" . $fields[$ii]; $nextone++; } if ($aspdf != "") { $pdf=new PDF(); $pdf->AddPage(); $pdf->SetFont('Arial','',12); $pdf->WriteHTML($thtml); if (strpos($emailto, "@") !== false) { $phpcont=$pdf->Output('','S'); } } } else { $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } } else if ($three == "") { $three=str_replace("+", " ", urldecode($val)); $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } else if ($four == "") { $four=str_replace("+", " ", urldecode($val)); $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } else { $one=$two; $two=$three; $three=$four; $four=str_replace("+", " ", urldecode($val)); $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } } foreach( $_POST as $name=>$val ) { if ($one == "") { $one=str_replace("+", " ", urldecode($val)); $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } else if ($two == "") { $two=str_replace("+", " ", urldecode($val)); $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } else if ($three == "") { $three=str_replace("+", " ", urldecode($val)); $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } else if ($four == "") { $four=str_replace("+", " ", urldecode($val)); $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } else { $one=$two; $two=$three; $three=$four; $four=str_replace("+", " ", urldecode($val)); $innards.="\nform.append('infld" . $nextone . "', \"" . $val . "\");\n"; $title.="|" . $val; $nextone++; } } $htmlis = " No Body - RJM Programming - October, 2019" . $title . " var nextone='" . $nextone . "'; var zhr=null, form=null; var ezhr=null, eform=null; var nextsb=''; var emailto=''; var level=1; var gats='" . $gats . "'; var aspdf='" . $aspdf . "'; function showEStuff(evt) { if (ezhr.readyState == 4) { if (ezhr.status == 200) { if (aspdf == '') { alert('Emailed to " . $emailto . " this webpage contents as an HTML attachment.'); } else { alert('Emailed to " . $emailto . " this webpage converted to PDF as attachment.'); } } } } function showStuff(evt) { if (zhr.readyState == 4) { if (zhr.status == 200) { document.title+='|' + nextsb; document.write(zhr.responseText); if (gats.indexOf('You can ') == -1) { gats+=' You can email to an entered email address what you have so far, and mixing the case here also outputs a PDF form of the conversation. A pseudo email address of a form like Leo Max would email rmetcalfe15@gmail.com HTML and PDF attachments, the PDF tabular look indicating that the conversation was between Leo and Max. '; } } } } function doemail() { ezhr=new XMLHttpRequest(); eform=new FormData(); eform.append('to', '" . $emailto . "'); eform.append('subject', 'Speech Bubbles'); eform.append('html', '' + document.head.innerHTML.split(''); ezhr.open('post', '//www.rjmprogramming.com.au/HTMLCSS/emailhtml.php', true); ezhr.onreadystatechange = showEStuff; ezhr.send(eform); } function donext(nextv) { zhr=new XMLHttpRequest(); form=new FormData(); " . $innards . " form.append('infld' + nextone, nextv); zhr.open('post', document.URL.split('#')[0].split('?')[0], true); zhr.onreadystatechange = showStuff; zhr.send(form); } function andthen() { if (level == 1) { nextsb=prompt(gats, ''); if (nextsb != null) { if (nextsb.indexOf('@') != -1 && (nextsb.indexOf(' ') == -1 || nextsb.indexOf('<') != -1) && document.title.indexOf('|') != -1) { emailto=nextsb; if (emailto.indexOf(' ') != -1 && emailto.indexOf('<') != -1 && 1 == 7) { emailto=emailto.replace(/\ /g, '_'); } level++; nextsb=''; } } } else if (level == 2) { emailto=prompt('Email to? A mixing of case here also outputs a PDF form of the conversation. A pseudo email address of a form like Leo Max would email rmetcalfe15@gmail.com HTML and PDF attachments, the PDF tabular look indicating that the conversation was between Leo and Max. ', ''); if (emailto == null) { emailto=''; } if (emailto.indexOf('@') == -1) { emailto=''; } if (emailto.indexOf(' ') != -1 && emailto.indexOf('<') != -1 && 1 == 7) { emailto=emailto.replace(/\ /g, '_'); } } if (nextsb == null) { level++; nextsb=''; } if (nextsb.trim() != '') { donext(nextsb); } else if (level == 2) { if (emailto == '') { emailto=prompt('Email to? A mixing of case here also outputs a PDF form of the conversation. A pseudo email address of a form like Leo Max would email rmetcalfe15@gmail.com HTML and PDF attachments, the PDF tabular look indicating that the conversation was between Leo and Max. ', ''); } if (emailto == null) { emailto=''; } if (emailto.indexOf('@') == -1) { emailto=''; } } if (emailto.indexOf('@') != -1) { location.href=document.URL.split('#')[0].split('?')[0] + '?to=' + encodeURIComponent(emailto) + '&rest=' + encodeURIComponent(document.title); } } function nothing() { } setTimeout(andthen, eval(nextone * 2000)); "; if ($aspdf != "" && $emailto != "") { if (strpos($emailto, "@") !== false) { $filename="htmlattachment.pdf"; $fns=["htmlattachment.pdf", "htmlattachment.html"]; //header('Content-type: application/pdf'); $fnc=[chunk_split(base64_encode($phpcont)), chunk_split(base64_encode(explode(""))]; //$phpcont=$pdf->Output('S'); $body=""; $subject = "Speech Bubbles"; $eol = PHP_EOL; $headers = 'From: ' . 'rmetcalfe@rjmprogramming.com.au' . $eol; $headers .= 'Reply-To: ' . 'rmetcalfe@rjmprogramming.com.au' . $eol; //$uid = md5(uniqid(time())); // a random hash will be necessary to send mixed content $separator = md5(time()); $headers .= "MIME-Version: 1.0" . $eol; $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol . $eol; $headers .= "Content-Transfer-Encoding: 7bit" . $eol; $headers .= "This is a MIME encoded message." . $eol . $eol; // message $headers .= "--" . $separator . $eol; $headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . $eol; $headers .= "Content-Transfer-Encoding: 8bit" . $eol . $eol; if ($phpcont != "" || sizeof($fns) > 1) { if (sizeof($fns) > 1) { $headers .= "Please see attachments created via HTTP://www.rjmprogramming.com.au/PHP/no_body.php below:" . $eol . $eol; } else { $headers .= "Please see attachment created via HTTP://www.rjmprogramming.com.au/PHP/no_body.php below:" . $eol . $eol; } for ($ic=0; $ic","\n",$body))); $headers .= $body . $eol . $eol; } $headers .= "--" . $separator . "--"; mail($emailto, $subject, "", $headers); $emailto=""; //exit; if ($aspdf == "Y") { header('Content-type: application/pdf'); echo $phpcont; exit; } } } else if ($aspdf != "") { header('Content-type: application/pdf'); $pdf->Output(); exit; } if ($emailto != "") { echo str_replace("setTimeout(", "\n doemail(); \n setTimeout(", $htmlis); } else { echo $htmlis; } ?>