Numero de paginas de un PDF (help)
| From: | DioX | 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;
}