note 97178 deleted from ref.pdf by danbrown
| From: | danbrown@php.net | Date: | Wed, 07 Apr 2010 13:31:54 +0000 |
| Subject: | note 97178 deleted from ref.pdf by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-167753@lists.php.net to get a copy of this message | ||
Note Submitter: Anonymous
----
Another modified version od the pdf2txt, compiled of all the pdf2txt's available.
<?php
function pdf2txt($filename){
$data = getFileData($filename);
$s = strpos($data,"%")+1;
$version = substr($data,$s,strpos($data,"%",$s)-1);
if(substr_count($version,"PDF-1.2")==0)
{ return handleV3($data); }
else
{ return handleV2($data); }
}
function handleV2($data){
$tmp = strpos($data, "stream");
$end_stream_delimiter = substr($data, $tmp+6, 2);
if($end_stream_delimiter != "\r\n")
{ $end_stream_delimiter = substr($end_stream_delimiter, 0, 1); }
//echo bin2hex($end_stream_delimiter); // - debug information
$a_obj = getDataArray($data,"obj","endobj");
foreach($a_obj as $obj)
{
$a_filter = getDataArray($obj,"<<",">>");
if (is_array($a_filter))
{ $j++;
$a_chunks[$j]["filter"] = $a_filter[0];
$a_data = getDataArray($obj,"stream".
$end_stream_delimiter,"endstream");
if (is_array($a_data))
{ $a_chunks[$j]["data"] = substr($a_data[0],
strlen("stream".$end_stream_delimiter),
strlen($a_data[0])-
strlen("stream".$end_stream_delimiter)-strlen("endstream")); }
}
}
foreach($a_chunks as $chunk){
$a_filter = split("/",$chunk["filter"]);
if ($chunk["data"]!=""){
// look at the filter to find out which encoding has been used
if (substr($chunk["filter"],"FlateDecode")!==false){
$data =@ gzuncompress($chunk["data"]);
if (trim($data)!=""){
// CHANGED HERE, before: $result_data .= ps2txt($data);
$result_data .= FilterNonText(PS2Text_New($data));
} else {
//$result_data .= "x";
}
}
}
}
return $result_data;
}
function FilterNonText($data) {
for($i=1;$i<9;$i++)
{
if(strpos($data, chr($i)) !== false)
{ return ""; }
}
return $data;
}
function handleV3($data){
// grab objects and then grab their contents (chunks)
$a_obj = getDataArray($data,"obj","endobj");
$result_data="";
foreach($a_obj as $obj){
//check if it a string
if(substr_count($obj,"/GS1")>0){
//the strings are between ( and )
preg_match_all("|\((.*?)\)|",$obj,$field,PREG_SET_ORDER);
if(is_array($field))
foreach($field as $data)
$result_data.=$data[1];
}
}
return $result_data;
}
function ps2txt($ps_data){
$result = "";
$a_data = getDataArray($ps_data,"[","]");
if (is_array($a_data)){
foreach ($a_data as $ps_text){
$a_text = getDataArray($ps_text,"(",")");
if (is_array($a_text)){
foreach ($a_text as $text){
$result .= substr($text,1,strlen($text)-2);
}
}
}
} else {
// the data may just be in raw format (outside of [] tags)
$a_text = getDataArray($ps_data,"(",")");
if (is_array($a_text)){
foreach ($a_text as $text){
$result .= substr($text,1,strlen($text)-2);
}
}
}
return $result;
}
function getFileData($filename){
$handle = fopen($filename,"rb");
$data = fread($handle, filesize($filename));
fclose($handle);
return $data;
}
function getDataArray($data,$start_word,$end_word){
$start = 0;
$end = 0;
unset($a_result);
while ($start!==false && $end!==false){
$start = strpos($data,$start_word,$end);
if ($start!==false){
$end = strpos($data,$end_word,$start);
if ($end!==false){
// data is between start and end
$a_result[] = substr($data,$start,$end-$start+strlen($end_word));
}
}
}
return $a_result;
}
?>