• # Bon, ben voilà...

    Posté par . En réponse au message Récupérer les enregistrements d'un fichier.... Évalué à 2.

    J'ai cherché, et j'ai trouvé ;-) !
    Ou plutôt, j'ai codé et j'ai trouvé.
    Je joins le code, si ça en intéresse d'autres tant mieux !
    Si vous trouvez ça gruick, tant mieux !
    Si vous avez mieux à proposer, tant mieux !
    Bref, je suis ouvert à toute critique de ce code, pourvu qu'elle soit constructive.

    function getInfos ($filename)
    {
    $nlcount=0;
    $fp = fopen ($filename, "rb");
    $taille = 0;
    while ($nlcount<3) // On passe les 2 derniers retours à la ligne
    {
    fseek ($fp, --$taille, SEEK_END);
    $c = fgetc($fp);
    if ($c == "\n") $nlcount++;
    }
    $offsetXref = fgets ($fp); // On récupère l'offset de l'objet xref
    fseek ($fp, $taille, SEEK_END);
    while ( ! preg_match ("/(\/Info)/", $buf)) // On recherche la chaîne /Info
    {
    while (fgetc($fp) != "\n")
    fseek ($fp, --$taille, SEEK_END);
    $buf = fgets ($fp);
    fseek ($fp, --$taille, SEEK_END);
    }
    $buf = preg_replace ('/(.*)(\/Info.*)/', '\2円', $buf); // On récupère le numéro de l'objet info dans le fichier pdf (2nd champs).
    $tmp = explode (' ', $buf);
    $objectNumber = $tmp[1];
    // close the file
    fseek ($fp, $offsetXref);
    while ($currObject < $objectNumber) // On parcours l'objet xref
    {
    $buf = fgets ($fp);
    if (preg_match ("/(\d{10} \d{5} [nf])/", $buf)) // Pour chaque ligne valide
    {
    if (!preg_match ("/(0000000000 *)/", $buf)) // N° d'objet valide
    $currObject++;
    }
    }
    $tmp = explode (' ', $buf); // On a l'adresse de l'objet Info
    $offsetInfos = $tmp[0];
    fseek ($fp, $offsetInfos); // On s'y rend !
    fgets ($fp); // Skip object header
    unset ($buf);
    while (! preg_match ('/(>>)/', $buf)) $buf.=fgets ($fp); // on récupère les infos
    $buf = preg_replace ("/(\n)/", "", $buf); // On nettoie les infos
    $retval = preg_replace ("/(>>.*endobj)/", "", $buf);
    $retval = preg_replace ("/(<<)/", "", $retval);
    fclose($fp);
    return ($retval);
    }
    $PdfInfos = getInfos ("essai.pdf");
    $infos = explode ('/', $PdfInfos);
    while (list ($k, $v) = each ($infos))
    {
    $pdfInfos[preg_replace ('/(.*)(\(.*)/', '\1円', $v)] = preg_replace ('/(.*\()(.*)(\).*)/', '\2円', $v);
    }
    print_r ($pdfInfos);


    Voilà.