Necesito ООН buscador PHP параграф archivos PDF

Идея La es que a través de un simple formulario buscador, pueda devolver el resultado solicitado buscando en varios PDFs de un directorio, ese buscador tiene que buscar dentro de los pdf que son de texto, generalmente lo hago todo en PHP, pero танго СИ que usar Javascript никакой шаг скрутки problema. Алгоритм Hice подобный довод "против" правит de PHP buscando en unn txt Плейно, pero СИ hago eso, подставляет PDF никакой funciona porque es binario.

Bien, ya casi conseguí lo que quiero, соло que ahora el buscador сушат сено algunas слова que никакой las encuentra, el código queda así:

 <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">


<form action="" method="post">
    <input type="text" name="buscar">
    <input type="submit" name="Submit" value="Buscar">
</form>


<?php




if(isset($_POST['Submit'])) {



include_once('class.pdf2text.php');

$directorio = opendir("./pdf"); //ruta actual
while ($archivo = readdir($directorio)) //obtenemos un archivo y luego otro sucesivamente
{



        $url = 'pdf/'.$archivo;

$a = new PDF2Text();
$a->setFilename($url);
$a->decodePDF();
$pdf = utf8_encode($a->output());


$larCharsNoAble = array("Ñ","á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","À","Ã","Ì","Ò","Ù","Ù","à ","è","ì","ò","ù","ç","Ç","â","ê","î","ô","û","Â","Ê","ÃŽ","Ô","Û","ü","ö","Ö","ï","ä","«","Ò","Ã","Ä","Ë");
$larCharsAble = array("N","a","e","i","o","u","A","E","I","O","U","n","N","A","E","I","O","U","a","e","i","o","u","c","C","a","e","i","o","u","A","E","I","O","U","u","o","O","i","a","e","U","I","A","E");
$texto = str_replace($larCharsNoAble, $larCharsAble, $pdf);






$cadena_solicitada   = $_POST['buscar'];
$larCharsNoAble = array("Ñ","á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","À","Ã","Ì","Ò","Ù","Ù","à ","è","ì","ò","ù","ç","Ç","â","ê","î","ô","û","Â","Ê","ÃŽ","Ô","Û","ü","ö","Ö","ï","ä","«","Ò","Ã","Ä","Ë");
$larCharsAble = array("N","a","e","i","o","u","A","E","I","O","U","n","N","A","E","I","O","U","a","e","i","o","u","c","C","a","e","i","o","u","A","E","I","O","U","u","o","O","i","a","e","U","I","A","E");
$post = str_replace($larCharsNoAble, $larCharsAble, $cadena_solicitada);


$posicion_coincidencia = stripos($texto, $post);




if ($posicion_coincidencia == true) {
    echo 'Se ha encontrado "'.$post.'"" en el archivo <a href="'.$url.'">'.$archivo.'</a><br>';
} 


 }

}


?>
0
задан 27.01.2017, 06:22
0 ответов

Если то, в чем ты нуждаешься, состоит в том, чтобы соглашаться на контент текста документа PDF, у тебя есть несколько способов это делать.

Одна из них используя этот класс: http://pastebin.com/dvwySU1a

Использование:

include('class.pdf2text.php');
$a = new PDF2Text();
$a->setFilename('test.pdf');
$a->decodePDF();
echo $a->output();

И другой выбор состоял бы в том, чтобы использовать инструмент CLI (pdftotext например), чтобы быть названной, например, используя system() или, наиболее еще, действующий перевернутая кавычка:

$texto = `pdftotext -raw document.pdf`;

Редактирование: Поскольку я протестировал книжный магазин, который я рекомендовал тебе, и не функционирует слишком большое добро (pdftotext да он это делает верно), я рекомендую тебе эта другой вызов pdfparser что должен быть установленным через composer используя, например, php composer.phar require smalot/pdfparser.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <title>Buscador de PDFs</title>
  </head>

  <body>
    <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
      <input type="text" name="buscar" placeholder="Palabras a buscar"
             value="<?= isset($_POST['buscar'])?htmlspecialchars($_POST['buscar']):'' ?>" />
      <input type="submit" value="Buscar" />
    </form>
<?php
if (isset($_POST['buscar'])) {
  include 'vendor/autoload.php';
  /* Configurar 'es_ES.UTF8' o cualquier local UTF-8 disponible para quitar
    el que viene por defecto, POSIX, que no funciona correctamente. Ojo con la
    local 'C.UTF-8': no convierte signos de puntuación como exclamaciones. */
  setlocale(LC_CTYPE, 'es_ES.UTF-8', 'es.UTF-8', 'C.UTF-8');
  $post = strtolower(iconv(mb_detect_encoding($_POST['buscar'], 'utf-8,iso-8859-15'), 'ASCII//TRANSLIT', $_POST['buscar']));
  echo "<p>Buscando la/s palabra/s '", htmlspecialchars($post), "'</p>\n";
  /* Subdirectorio "pdf" dentro de la ruta actual */
  $directorio = opendir(__DIR__ . '/pdf');
  /* Vamos obteniendo los archivos uno a otro */
  while ($archivo = readdir($directorio)) {
    /* Si el archivo no tiene extensión '.pdf' pasamos al siguiente */
    if (!preg_match('/\.pdf$/i', $archivo)) {
      continue;
    }
    /* Obtenemos el contenido del archivo PDF */
    $parser = new \Smalot\PdfParser\Parser();
    $pdf = $parser->parseFile(__DIR__ . '/pdf/' . $archivo);
    $texto = $pdf->getText();
    /* Normalizamos el contenido del documento PDF igual que hicimos con la consulta */
    $texto = strtolower(iconv(mb_detect_encoding($texto, 'utf-8,iso-8859-15'), 'ASCII//TRANSLIT', $texto));
    echo "<p>Probando en el archivo '", htmlspecialchars($archivo), "': '" . htmlspecialchars($texto) . "'</p>\n";
    $posicion_coincidencia = strpos($texto, $post);
    if ($posicion_coincidencia !== false) {
      echo 'Se ha encontrado "', htmlspecialchars($post), '" en el archivo <a href="pdf/', urlencode($archivo), '">',
        htmlspecialchars($archivo), '</a><br>';
    } 
  }
}
?>
  </body>
</html>

Имей в виду, что это очень важно для функционирования функции //TRANSLIT iconv правильная конфигурация дорожки системы.

2
ответ дан 03.12.2019, 17:36
  • 1
    Частично он это делает, хотя, не давая чрезмерных деталей. Захоти искать цепи внутри PDFs, которые у него есть в каталоге используя PHP или язык сценариев JavaScript (é ste ú ltimo он заставляет думать, что он мог хотеть сделать это в стороне клиента, но в этом случае tendrí эксперт razó n, necesitarí чтобы расширять детали), и что попробовал открыть это с file_get_contents() получая бинарные данные, которые он обычно является ló gico, если он имеет imá гены, интегрированный. Которое podrí чтобы случаться дело в том, что PDF были все imá гены и он захочет сделать OCR на é l, что serí в другую opció n má в. –  20.01.2017, 11:35
  • 2
    Я верю в то, что, если @OscarGarcia он захотел побеспокоиться о том, чтобы отвечать и помещать có я говорю, что он, потому что он думает, что то, что они спросили, является Вашим ответом, не, потому что нужно расставлять знаки препинания в негативе. –  20.01.2017, 14:16
  • 3
    @Spidvmp вероятно мой ответ не был тем, что он ищет, потому что он не осветлил детали как, например, если PDF está n на сервере или в команде клиента, или если PDF имеет só imá гены и нужно извлекать их, чтобы перемещать их OCR, и т.д.... вероятно негативы придите не созерцания этих возможностей раньше, но tambié n он верный, что podrí когда оставляет комментарий тот, кто puntú и негатив, чтобы, по крайней мере, объяснять мотив. Спасибо за опору. –  20.01.2017, 14:19
  • 4
    @J.Doe большое спасибо из-за опоры. Respondí (20 ene, 9:29) до того, как вопрос закрывался (20 ene, 10:15). Llegué чтобы иметь 4 отрицательных обета. Entendí (или creí понимать) то, что он спрашивал с первого момента, потому что я tambié n я старался соглашаться на контент PDFs и встретился с теми же проблемами (прежде всего со словарями слов, которые ослепляют контент текста), из-за которого он ofrecí та же solució n, что usé (программа pdftotext). Он пришел ко мне хорошо, потому что из-за дорожки я открыл другой инструмент (pdfparser), что не требует aplicació n приходящая ученица. –  27.01.2017, 16:14
  • 5
    Я предполагаю, что в неких людей (которых я не сохраняю ningú n тип злобы) им не делает изящество мысль отвечать, или которую кто-то ответил, если вопрос не está формулируемая, поскольку они желают. Я благодарен за опору тем, кто проголосовали за новое открытие. –  27.01.2017, 16:20