Неправильный результат после каждого цикла.JSON - PullRequest
0 голосов
/ 10 июля 2019

У меня есть файл результатов JSON, который содержит все ссылки, но после цикла foreach я пропускаю почти все данные.

Я отладил код и изменил разнесение с - на _, но это не помогло.

$pdfs = preg_grep('~\.(pdf)$~', getDirContents($config['directory']));

$result = [];
echo '<pre>';
var_dump($pdfs);

foreach ($pdfs as $doc) {

    var_dump($doc);
    $url = explode("/", $doc);
    $parser = new \Smalot\PdfParser\Parser();
    $pdf = $parser->parseFile($doc);

    $text = $pdf->getText();
    $result[] = [
        'file' => $url[9],
        'text' => $text, 
    ];
}
$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($result));
fclose($fp);

Я исключаю только то, что могу иметь все, что включено вфайл JSON.

array(27) {
  [0]=>
  string(111) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-android-DEF.pdf"
  [1]=>
  string(107) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-iOs-DEF.pdf"
  [2]=>
  string(102) "/home/***/domains/***.com/public_html/doc/documenten/something/Anonimiseren Databases.pdf"
  [3]=>
  string(110) "/home/***/domains/***.com/public_html/doc/documenten/something/Arbeidstijdenwet in CAS.pdf"
  [4]=>
  string(128) "/home/***/domains/***.com/public_html/doc/documenten/something/Configuration Reference Manual - CAS 5,18.pdf"
  [5]=>
  string(128) "/home/***/domains/***.com/public_html/doc/documenten/something/Configuration Reference Manual - CAS 5,19.pdf"
}
string(111) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-android-DEF.pdf"
string(107) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-iOs-DEF.pdf"
string(102) "/home/***/domains/***.com/public_html/doc/documenten/something/Anonimiseren Databases.pdf"
string(110) "/home/***/domains/***.com/public_html/doc/documenten/something/Arbeidstijdenwet in CAS.pdf"

Прочтите это, прежде чем дать ответ! Первый массив показывает все в файле JSON, а нижний массив показывает результат после каждого цикла.

После вызова метода:

$pdf = $parser->parseFile($doc);

После вызова этого метода произошел сбой.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

В более старых версиях Smalot\PdfParser, вплоть до v0.12.0, метод parseFile() скрывает ошибки, возникающие при синтаксическом анализе содержимого PDF. См. Smalot / PdfParser / Parser.php строка 74 .

Эта проблема была исправлена ​​в v0.13.0 . Убедитесь, что вы работаете по крайней мере v0.13.


Даже в самой последней версии оператор @ по-прежнему используется для отключения ошибок при создании нового объекта TCPDF_PARSER. См строка 93 :

@$parser = new \TCPDF_PARSER(ltrim($content));

Любая фатальная ошибка здесь также приведет к выходу кода без четкого сообщения об ошибке.

Если проблема с v0.14 по-прежнему возникает, отредактируйте Smalot/PdfParser/Parser.php и удалите @. Вы должны видеть, что идет не так.

0 голосов
/ 10 июля 2019

Попробуйте это:

<?php

$config["directory"] = "/my/path/to/pdfs/";    
$pdfs = glob("{$config["directory"]}*.pdf");
$result = [];

foreach($pdfs as $pdf) {

    $filename = pathinfo($doc, PATHINFO_BASENAME);
    $parser = new \Smalot\PdfParser\Parser();
    $pdf = $parser->parseFile($pdf);
    $text = $pdf->getText();
    $result[] = [
        "file" => $filename,
        "text" => $text
    ];

}

file_put_contents("results.json", json_encode($result));

Это в основном делает то же самое, но с меньшим пухом. Вам может понадобиться настроить $ config ["directory"], чтобы он соответствовал пути, в котором хранятся ваши PDF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...