Numero de paginas de un PDF (help)

From: Date: Tue, 11 May 2004 10:52:26 +0000
Subject: Numero de paginas de un PDF (help)
Groups: php.general.es 
Request: Send a blank email to general-es+get-48410@lists.php.net to get a copy of this message
Hola lista como estais? Ante nada daros las gracias de antemano os planteo la duda siguiente, Necesitaria saber el numero de paginas que tiene un archivo pdf, he estado mirando varias cosas y he encontrado lo siguiente Hay varias versiones de archivos pdf (desde la versión 1.1 a la 1.5) en todos ellos se sigue un patron parecido pero no definitivo asi pues las variables en que dentro de un pdf abierto en modo texto se encontrarian las paginas acostumbran a encontrarse despues de un /N o un /COUNT segun la version. Mi funcion la he testeado con un 90% de los casos y funciona correctamente pero a veces no determina bien las paginas del archivo pdf Yo kreo k es pork a veces al koger los datos del fichero al no kogerlo entero a veces obtengo una linea entera y puedo partir una variable /COUNT ejemplo si el documento pdf pone lo siguiente 642 0 obj << /Type /Pages /Count 36 /Parent 644 0 R /Kids [250 0 R 294 0 R 338 0 R 391 0 R 420 0 R 462 0 R] >> endobj 643 0 obj << /Type /Pages Podria ser que yo al hacer esta funcion -> $sLine = fgets($fAbierto, 128); obtuviera solo hasta /Cou asi pues no podria determinar el Count y lo saltaria. De todas maneras a veces dentro del fichero pdf despues del /Count y el /N no esta realmente el numero de paginas deseado. Estos casos son los menos pero me gustaria saber si alguien ha realizado alguna funcion similar o me puede dar una solución para no cortar el valor de $sLine (ir variando el valor de 128 256 i tal tampoko serviria) De todas maneras os envio la funcion a ver si me podeis hechar un cable MUCHISIMAS GRACIAS POR VUESTRO INTERES pd: Vereis que para leer la linea hay una parte comentada que intentaria leer caracter a caracter hasta encontrar una / pero no me funciona y no se porque :? function InfoPaginas ( $Archivo ) { // Variables generales $iPages = -1; $iEncontrado = 0; $iIndex=0; // Cadenas de texto estandares en un archivo pdf $sIni_Ver = "%PDF-"; $sIni_Count = "/Count"; $sIni_N = "/N"; // Inicializamos las variables $iN = "0"; $iCount = "0"; $sVer = ""; // Comprobamos que no exista ningun error al abrir el fichero if ( file_exists( $Archivo ) ){ // Abrimos el archivo como solo lectura $fAbierto = fopen ($Archivo, "r"); // Recorremos todas las lineas del fichero hasta final de fichero //echo ("Acabamos de abrir el archivo $Archivo"); while (!feof($fAbierto)) { $sLine = fgets($fAbierto, 128); /*$sChar = fgets($fAbierto, 2); while ( ($sChar != "/" ) || ( !feof($fAbierto)) ) { $sChar = fgets($fAbierto, 2); echo ("$sChar"); } //echo ("$sChar"); $sLine = fgets($fAbierto, (strlen ($sIni_Count)+5) ); $sLine = "//".$sLine; */ $iIndex=$iIndex+1; // Buscamos la cadena de version if (eregi ( $sIni_Ver,$sLine)) { echo ("Archivo:$Archivo<br>Version: "); $iPos = strpos( $sLine , $sIni_Ver ); for ( $i = 0 ; $i <= 3 ; $i++ ) { $sVer .= $sLine[$iPos+strlen($sIni_Ver)+$i]; } echo ("$sVer<br>"); } // Buscamos cadenas que contienen numero de paginas if (eregi ( $sIni_Count,$sLine)) { $iPos = strpos( $sLine , $sIni_Count ); $sCount = ""; for ( $i=0 ; $i <= 5 ; $i++ ) { $sCount .= $sLine[$iPos+strlen($sIni_Count)+$i]; } // Guardaremos el valor mayor de numero de paginas $iTmp = intval($sCount); if ($iTmp > $iCount){ $iCount = $iTmp; } } // Buscamos cadenas que contienen numero de paginas if (eregi ( $sIni_N,$sLine) and ($iEncontrado == 0) and ($iIndex < 5 ) ){ $iPos = strpos( $sLine , $sIni_N ); $sN = ""; for ( $i=0 ; $i <= 5 ; $i++ ) { $sN .= $sLine[$iPos+strlen($sIni_N)+$i]; } // Leemos solo una vez el valor de $iEncontrado = 1; $iN = intval($sN); } } fclose ($fAbierto); // De las dos cadenas que contienen numero de paginas devolveremos /N si lo hemos encontrado // al principio del documento o el valor de Count if ($iN > 1){ $iPages = $iN; }else{ $iPages = $iCount; } // Devolvemos numero de paginas } return $iPages; }

« previous php.general.es (#48410) next »