Voici ce que j'ai trouvé après plusieurs jours de recherche. En fait, je crois qu'il n'y a pas de moyen direct de lire un fichier pdf sur internet en php. J'ai commencé par trouvé PDFLib TET (Text Extraction Toolkit), qui extrait un fichier pdf en texte. Malheureusement, il ne peut pas lire des fichiers directement du web. Donc, on charge d'abord le contenu du fichier pdf web dans un fichier virtuel, ensuite on peut lire ce fichier virtuel pdf, et finalement on l'extrait pour obtenir un fichier texte.
<?php
//1-download fichier à http://www.pdflib.com/download/tet/ (version windows xp 32 bits, TET-4.0p2-MSWin32.msi)
//2-installer sur un ordi, pas obliger d'être le serveur
//3-aller C:\Program Files (x86)\PDFlib\TET 4.0p2 32-bit\bind\php, il y a les versions de php
//4-prendre libtet_php.dll dans le bon répertoire représentant la version de php installé
//5-mettre ce fichier dans le répertoire de php\ext et modifier php.ini pour mettre extension=libtet_php.dll
// il doit y avoir une section TET lorsqu'on fait php phpinfo();
// *** $Id: extractor.php,v 1.11 2010/07/21 19:58:35 rjs Exp $ Simple PDF text extractor based on PDFlib TET ***
$globaloptlist = "searchpath={../data ../../data ../../../resource/cmap}"; //global option list
$docoptlist = ""; // document-specific option list
$pageoptlist = "granularity=page"; // page-specific option list
$separator = "\n"; // separator to emit after each chunk of text. This depends on the application's needs; for granularity=word a space character may be useful
$pageno = 0;
try {
$tet = new TET();
//mettre ici les infos nécessaire
$filepdf = file_get_contents('http://www.irs.gov/pub/irs-pdf/fw4.pdf'); //adresse web du fichier PDF
$pvf_filename = "/pvf/virt.pdf"; //nom du fichier virtuel, peux laisser tel quel
$tet->create_pvf($pvf_filename, $filepdf,"" ); //ici c'est la création dufichier virtuel, donc pas touche
$infilename = $pvf_filename;
$outfilename = "fichier.txt"; //nom du fichier de sortie
if (!$outfp = fopen("$outfilename", "wb" )) {
die("Couldn't open output file '" . $outfilename . "'\n" );
}
$tet->set_option($globaloptlist);
$doc = $tet->open_document($infilename, $docoptlist);
if ($doc == -1) {
die("Error ". $tet->get_errnum() . " in " . $tet->get_apiname()
. "(): " . $tet->get_errmsg() . "\n" );
}
/* get number of pages in the document */
$n_pages = $tet->pcos_get_number($doc, "length:pages" );
/* loop over pages in the document */
for ($pageno = 1; $pageno <= $n_pages; ++$pageno) {
$page = $tet->open_page($doc, $pageno, $pageoptlist);
if ($page == -1) {
print("Error ". $tet->get_errnum() ." in ". $tet->get_apiname()
. "(): " . $tet->get_errmsg() . "\n" );
next; /* try next page */
}
/* Retrieve all text fragments; This is actually not required
* for granularity=page, but must be used for other granularities.
*/
while (($text = $tet->get_text($page)) != "" ) {
fwrite($outfp, $text); /* print the retrieved text */
/* print a separator between chunks of text */
fwrite($outfp, $separator);
}
if ($tet->get_errnum() != 0) {
print("Error ". $tet->get_errnum() . " in " .
$tet->get_apiname() . "(): on page $pageno"
. $tet->get_errmsg() . "\n" );
}
$tet->close_page($page);
}
fclose($outfp);
$tet->close_document($doc);
}
catch (TETException $e) {
if ($pageno == 0) {
die("TET exception occurred in extractor sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
$e->get_errmsg() . "\n" );
} else {
die("TET exception occurred in extractor sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() .
"on page $pageno: " . $e->get_errmsg() . "\n" );
}
}
catch (Exception $e) {
die($e);
}
$tet = 0;
?>
Message édité par waldo955 le 17-10-2010 à 22:38:15