Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/01/2006, 10:25
DAR
Invitado
 
Mensajes: n/a
Puntos:
De acuerdo Mostrar archivos DOC usando PHP

Hola. Desarrolle esta estupida, pero sencilla, aunque limitada forma de poder visualizar un documento de microsoft word utilizando PHP para procesarlo

Ya que no encontre un script capaz de hacerlo por mi, me puse a analizar un documento word en formato texto (como lo tomaria php como archivo) , y descubri una sencilla forma de extraer el texto plano (sin estilos, eso ya es mas complicado) de un *.doc para mostrarlo en html, (o con alguna modificacion sencilla, crear otro archivo, txt o cual fuera)

Un archivo word se compone en varias partes, declaraciones generales, declaraciones de estilo, encabezados, datos mas, datos menos, y en el medio, el texto plano(pero esa ubicacion del texto plano cambia). Un dato curioso es que, al texto plano, lo preceden muchos caracteres NULL (pegados, sin algo en el medio)

El script se encarga de abrir el archivo, buscar una cantidad grande de NULLs seguidos, desechar los que sobren, y empezar a tomar caracteres (de nuestro verdadero texto al fin); hasta que aparezca otro NULL (termina el texto)

Ya que, procesa caracter por caracter, puede ser lento y consumir cpu si hacemos la conversion al vuelo, pero si , abrimos otro archivo, y reemplazamos los "echo" por "fputs" , podemos crear una version espejo del Word.. en un archivo txt... y nos evitamos volver a convertirlo (si es que va a ser visto muchas veces)

Sin mas.. aca va el codigo, es muy tonto, si a alguien se le ocurre como mejorarlo, o alguna mejor manera de procesarlo, para poder visualizar estilos y demas.. bienvenido sea. Espero que de algo les sirva

Código PHP:
<?
//Microsoft WORD - PHP Viewer
$fp fopen($ruta,"r");  //$ruta es nuestro archivo .doc

$char fgetc($fp);
$charant NULL$cantNull 0;


//Tomamos 120 Nulos seguidos , siendo un nulo en PHP: \0
while($cantNull<120)
{
    
$char fgetc($fp);
    
    if (
$char=="\0" && $charant=="\0")
    {
        
$cantNull += 1;
    } else {
        
$cantNull 0;
    }
    
    
$charant $char;
}

//Tomamos los nulos sobrantes hasta encontrar otro caracter
$text="\0";
while(
$text=="\0")
{
    
$text fgetc($fp);
}

//Imprimimos hasta que encuentre otro Null
echo $text;
while(
$text!="\0")
{
    
$text fgetc($fp);
    echo 
nl2br($text);  //nl2br convierte los saltos de linea en <br />
}

?>
Saludos. Darío