function onSubmit($p) { $error = ErrorHandler::getInstance(); $res = base64_decode($p['data'], true); if ($res === false) { $error->add('Input is not base64 encoded'); return false; } echo dh($res); }
private function parseRow($row) { if (!$row) { return; } //echo "RAW: (".strlen($row).") ".$row."\n"; //dh($row); echo "\n"; if (substr($row, 0, 1) == '%') { //echo "%comment\n"; //dh($row); return; } if ($row == "xref") { //XXX: code is unused // d($row); //"base index" "number of entries" $row = $this->readRow(); //d($row); list($idx, $cnt) = explode(' ', $row); // echo "DBG: Reading ".$cnt." lines of xref:\n"; for ($i = 0; $i < $cnt; $i++) { $row = trim(fgets($this->fp, 1000)); // echo "\t".($idx+$i).":\t".$row."\n"; } return; } if ($row == "startxref") { //XXX: code is unused //offset to xref header $row = trim(fgets($this->fp, 1000)); // echo "DBG STARTXREF: ".$row."\n"; return; } if ($row == "trailer") { //XXX: code is unused $row = trim(fgets($this->fp, 1000)); // echo "DBG TRAILER: ".$row."\n"; // $dict = pdf_parse_dict($row); return; } // 1 0 obj <</Filter/DCTDecode/Type/XObject/Length 17619/BitsPerComponent 8/Height 181/ColorSpace/DeviceRGB/Subtype/Image/Width 420>>stream // 8 0 obj<</Type/Page/Contents 6 0 R/Parent 7 0 R/Resources<</XObject<</img0 1 0 R>>/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]/Font<</F1 2 0 R/F3 4 0 R/F2 3 0 R/F4 5 0 R>>>>/MediaBox[0 0 595 842]>> list($n1, $n2, $s) = explode(' ', $row, 3); // echo "DBG: ".$n1.",".$n2.": ".$s."\n"; if (substr($s, 0, 3) == 'obj') { $s = trim(substr($s, 3)); if (substr($s, -6) == "stream") { $s = substr($s, 0, -6); $this->parseStream($s); // } else { // dh($s); // $dict = pdf_parse_dict($s); //d($dict); } $data = fgets($this->fp, 7); if ($data != "endobj") { throw new \Exception('unexpected end obj: ' . $data); } return; } else { if (trim($row)) { // a pdf 1.3 sample has a row with 9 spaces+linefeed echo "DUNNO WHAT DO!\n"; dh($row); die; } } }