Cautare in PDF

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

Avatar utilizator
PCPbSlack
Average Member
Mesaje: 143
Membru din: Dum Noi 23, 2003 1:28 am
Localitate: Ploiesti
Contact:

Cautare in PDF

Mesajde PCPbSlack » Vin Oct 08, 2004 6:38 pm

Extragere text din PDF pentru functie de SEARCH

Salutare la toata lumea.

Lucrez de aproape 2 ani in PHP, si am trecut cu bine de multe provocari, insa acum m-am lovit de o problema la care sincer momentan nu am reusit sa gasesc o solutie. Unul din clienti mi-a cerut sa fac o functie de search pe niste fisiere PDF de pe server. Am reusit cu "succes" (ghilimele apar pentru ca aceasta cautare nu merge cu toate fisierele PDF - inca nu am reusit sa o standardizez) sa fac cautarea in fisiere PDF, insa nu am reusit sa returnez in nici un fel index-ul paginii de unde extrag textul pentru cautare.

Daca aveti idei, postatile aici, poate ajuta si pe altii. :wink:

Vesnic recunoscator, Christian



Avatar utilizator
PCPbSlack
Average Member
Mesaje: 143
Membru din: Dum Noi 23, 2003 1:28 am
Localitate: Ploiesti
Contact:

Daca nu are nimeni idei postez eu una

Mesajde PCPbSlack » Dum Oct 10, 2004 1:17 pm

Dupa ce am petrecut ceva timp pe diverse forumuri am ajuns la urmatoarea concluzie.

Eu foloseam pentru cautarea in fisierele PDF clasa pdf_search pe care am gasit-o la , dar care se pare ca are unele bug-uri pe care nu am avut rabdarea necesara sa le analizez si sa le rezolv. In acest caz am luat-o pe alta directie, si anume. Am gasit XPDF care este o unealta foarte utila care extrage textul din fisierele PDF si il copiaza intr-un fisier txt pe server. Mie nu imi ramane decat sa fac un parsing pe fisierul respectiv si sa pun textul intr-o tabela in baza de date si fac cautarea acolo.

Oricum ar mai fi o problema insa nu asa de importanta. Cum se pot extrage thumbnail-uri ale paginilor dintr-un fisier PDF?

Avatar utilizator
PCPbSlack
Average Member
Mesaje: 143
Membru din: Dum Noi 23, 2003 1:28 am
Localitate: Ploiesti
Contact:

Revenire

Mesajde PCPbSlack » Lun Oct 11, 2004 12:15 am

Avand in vedere ca sunt nou in lumea linux si sincer sa fiu dezvolt cu succes cod PHP in win2k :oops: (cu toate ca trebuie sa fac la un moment dat trecerea la Linux definitiv), am fost nevoit sa fac functional XPDF-ul pe serverul de hosting. Aici nu au fost probleme datorita suportului oferit de cei de la hosting care s-au oferit sa-mi instaleze ei XPDF-ul. Iata si codul de test pe care il rulez pentru a extrage textul din PDF. Sper sa fie util la cineva, mie cu siguranta imi este.

[php]<?php
$file = "lipsum.pdf"; /* numele fisierului pdf (aici se afla in acelasi folder cu scriptul */
$file_name = substr($file,0,-4); /* extragerea rapida a numelui fisierului (fisierele nu pot avea decat extensia PDF) */
$view_encoding = "iso-8859-2"; /* extragerea se face dintr-un fisier pdf care contine diacritice */

exec("pdftotext ".$file); /* pdftotext este unealta din XPDF care extrage textul din fisierul $file si creeaza un fisier txt cu acelasi nume care contine textul*/

$infoDocument = shell_exec("pdfinfo ".$file); /* informatii despre fisierul pdf care pot fi mai tarziu utile */
$theDocument = $file_name.".txt";

/*
- verifica daca fisierul exista si il parcurge afisand rezultatele pe pagini
- am stabilit ca daca pe pagina respectiva exista mai putzin de 30 de caractere pagina este o imagine sau cover sau pur si simplu are sub 30 de caractere :)
*/
if (file_exists($theDocument)) {
$fp = fopen($theDocument, "rb");
$content = fread($fp, filesize($theDocument));
fclose($fp);

$content = explode(chr(12), $content);

print '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset='.$view_encoding.'">
<title>PDF Document Text Extract Preview</title>
<style>
body {
font-family:verdana,arial;
font-size:11px;
}
</style>
</head>
<body>';
print '<pre>'.$infoDocument.'</pre>';

print 'Număr de pagini în fişierul PDF <b><a href="'.$file.'" target="_blank">'.$file.'</a></b> - <font color=#ff0000>'.(count($content)-1).'</font><hr><p></p>';


for($i=0; $i<count($content)-1; $i++) {
print '<b>Pagina '.($i+1).'</b>';
if (strlen(ereg_replace(" ","",trim($content[$i])))<30) {
print ' - <font color=#ff0000>posibila imagine sau cover</font>';
}
print '<br>'.$content[$i];
print '<hr>';
}


print '
</body>
</html>';
} else {
print '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset='.$view_encoding.'">
<title>PDF Document Text Extract Preview</title>
<style>
body {
font-family:verdana,arial;
font-size:11px;
}
</style>
</head>
<body>
<center><font color=#ff0000><b>:: Extragerea textului nu a fost posibilă ::</b></font></center>
</body>
</html>
';
}
?>[/php]

apann
Average Member
Mesaje: 93
Membru din: Lun Mai 17, 2004 1:47 pm

Mesajde apann » Lun Oct 11, 2004 10:48 am

Ai noroc ca ai gasit un hosting care te lasa sa faci
[php]
exec()
[/php]

Avatar utilizator
PCPbSlack
Average Member
Mesaje: 143
Membru din: Dum Noi 23, 2003 1:28 am
Localitate: Ploiesti
Contact:

pai nu am gasit

Mesajde PCPbSlack » Lun Oct 11, 2004 10:51 am

i-am imtrebat daca se poate face, le-am spus pentru ce il folosesc si mi-au dat voie.

acum totul tine de bunul simt :)

nu mi-au placut niciodata magariile, si nici nu le practic. le consider pierdere de vreme si de neuroni

kristache
Junior Member
Mesaje: 45
Membru din: Joi Feb 19, 2004 8:21 pm
Localitate: Iasi
Contact:

Mesajde kristache » Lun Oct 11, 2004 5:45 pm

perfect de acord cu tine insa ma indoiesc ca multe hosturi vor fi la fel de "receptive".

multumim pentru postare. daca gasesti insa si o alta varianta te rog posteaz'o si pe aceasta.

numai bine
kristache. over.


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 9 vizitatori