note 107714 added to ref.pdf

From: Date: Tue, 28 Feb 2012 17:00:40 +0000
Subject: note 107714 added to ref.pdf
Groups: php.notes 
Request: Send a blank email to php-notes+get-186415@lists.php.net to get a copy of this message
Hello, I tried to find a way to fix the encode problem, so I have updated the function pdf2string($sourcefie) : <?php function pdf2string($sourcefile) { $fp = fopen($sourcefile, 'rb'); $content = fread($fp, filesize($sourcefile)); fclose($fp); $searchstart = 'stream'; $searchend = 'endstream'; $pdfText = ''; $pos = 0; $pos2 = 0; $startpos = 0; while ($pos !== false && $pos2 !== false) { $pos = strpos($content, $searchstart, $startpos); $pos2 = strpos($content, $searchend, $startpos + 1); if ($pos !== false && $pos2 !== false){ if ($content[$pos] == 0x0d && $content[$pos + 1] == 0x0a) { $pos += 2; } else if ($content[$pos] == 0x0a) { $pos++; } if ($content[$pos2 - 2] == 0x0d && $content[$pos2 - 1] == 0x0a) { $pos2 -= 2; } else if ($content[$pos2 - 1] == 0x0a) { $pos2--; } $textsection = substr( $content, $pos + strlen($searchstart) + 2, $pos2 - $pos - strlen($searchstart) - 1 ); $data = @gzuncompress($textsection); $pdfText .= pdfExtractText($data); $startpos = $pos2 + strlen($searchend) - 1; } } // I tried to do without success: preg_replace('\\\\([0-9]{3})', chr(octdec('$1')), $pdfText); preg_match_all('\\\\([0-9]{3})', $pdfText, $found_octal_values); foreach($found_octal_values as $key => $array_of_value) { foreach($array_of_value as $value) { $pdfText = str_replace($value, chr(octdec(substr($value, 1))), $pdfText); } } return preg_replace('/(\s)+/', ' ', $pdfText); } function pdfExtractText($psData){ if (!is_string($psData)) { return ''; } $text = ''; // Handle brackets in the text stream that could be mistaken for // the end of a text field. I'm sure you can do this as part of the // regular expression, but my skills aren't good enough yet. $psData = str_replace('\)', '##ENDBRACKET##', $psData); $psData = str_replace('\]', '##ENDSBRACKET##', $psData); preg_match_all( '/(T[wdcm*])[\s]*(\[([^\]]*)\]|\(([^\)]*)\))[\s]*Tj/si', $psData, $matches ); for ($i = 0; $i < sizeof($matches[0]); $i++) { if ($matches[3][$i] != '') { // Run another match over the contents. preg_match_all('/\(([^)]*)\)/si', $matches[3][$i], $subMatches); foreach ($subMatches[1] as $subMatch) { $text .= $subMatch; } } else if ($matches[4][$i] != '') { $text .= ($matches[1][$i] == 'Tc' ? ' ' : '') . $matches[4][$i]; } } // Translate special characters and put back brackets. $trans = array( '\351' => '&eacute;', '\'' => '\'', '...' => '…', '\205' => '…', '\221' => chr(145), '\222' => chr(146), '\223' => chr(147), '\224' => chr(148), '\226' => '-', '\267' => '•', '\(' => '(', '\[' => '[', '##ENDBRACKET##' => ')', '##ENDSBRACKET##' => ']', chr(133) => '-', chr(141) => chr(147), chr(142) => chr(148), chr(143) => chr(145), chr(144) => chr(146), ); $text = strtr($text, $trans); return $text; } echo utf8_encode(pdf2string('file.pdf')); ?> ---- Server IP: 69.147.83.197 Probable Submitter: 80.12.85.20 ---- Manual Page -- http://www.php.net/manual/en/ref.pdf.php Edit -- https://master.php.net/note/edit/107714 Del: integrated -- https://master.php.net/note/delete/107714/integrated Del: useless -- https://master.php.net/note/delete/107714/useless Del: bad code -- https://master.php.net/note/delete/107714/bad+code Del: spam -- https://master.php.net/note/delete/107714/spam Del: non-english -- https://master.php.net/note/delete/107714/non-english Del: in docs -- https://master.php.net/note/delete/107714/in+docs Del: other reasons-- https://master.php.net/note/delete/107714 Reject -- https://master.php.net/note/reject/107714 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#186415) next »