Получить значения (id, purchaseOrderNumber и сумму) из файла PDF в Laravel? - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь получить значения из загруженного файла PDF.Поэтому, когда файл успешно загружен, я хочу получить некоторые данные, в частности, ID, PurchaseOrderNo и Amount из этого PDF-файла.

До сих пор я подошел к spatie / pdf-to-text , и я могу загрузить и открыть файл PDF, но не могу и не знаю, как я могу получитьнеобходимые данные и отобразить их в моем Blade View.

$name=$file->getClientOriginalName();
$file->move(public_path().'/pdftotext/', $name);
$data[] = $name;
$attachments = public_path().'/pdftotext/'. $name;


$path = public_path('/pdftotext/'. $name);
$text =  Pdf::getText ('Invoice 56569.pdf', $path);  

Приведенный выше код загрузит файл PDF и сохранит его в папке public / pdftotext и после загрузки откроет загруженный файл PDF, но неПолучить любые значения.

Пожалуйста, посоветуйте мне, как я могу это исправить.Спасибо за ваше время.

1 Ответ

0 голосов
/ 04 марта 2019

Вместо этого:

   $name=$file->getClientOriginalName();
   $file->move(public_path().'/pdftotext/', $name);
   $data[] = $name;
   $attachments = public_path().'/pdftotext/'. $name;


   $path = public_path('/pdftotext/'. $name);
   $text =  Pdf::getText ('Invoice 56569.pdf', $path); 

Имеет больше смысла сделать это:

   $name = $file->getClientOriginalName();
   $path = public_path('/pdftotext/');
   $file->move($path, $name);
   $text =  Pdf::getText ($name, $path); 

   // -- these have no bearing on this code so do them a bit later (here I will just ignore them)
   //$data[] = $name;  
   //$attachments = $path.$name;

Хотя это может не "решить" вашу проблему, ее было слишком много для публикации вкомментарий, и он сделает его намного чище, менее глючным и более приятным для чтения.

Я не очень организованный человек, но недостаток организации в коде вызовет у вас больше проблем, чем в большинстве других случаев.

Самая важная вещь в коде, который я выложил выше, это изменение:

 $path = public_path('/pdftotext/');

Вместо того, что у вас было изначально (с именем файла)

 $path = public_path('/pdftotext/'. $name);

Скорее или нет, это «проблема», зависит от того, как они реализуют Pdf::getText, они могут использовать dirname() для второго аргумента, что будет хорошо, так как это вернет имя папки {минус} - имя файла.Но если они проверят is_dir() на это, то это потерпит неудачу.

После перемещения вещей мне стало ясно, как это использовалось.

  $path = public_path('/pdftotext/'.$name);
  $file->move($path, $name);  ///file->move(pdftotext/book.pdf, book.pdf) etc...

Что, казалось, не правильномне.Кроме того, это сделает ваш вызов Pdf::getText таким (например)

  echo Pdf::getText('book.pdf', '/custom/path/to/pdftotext/book.pdf');

Когда вы, вероятно, захотите вот что:

 echo Pdf::getText('book.pdf', '/custom/path/to/pdftotext/');

Вот почему я сказал выше, чтоэто зависит от того, как они реализуют Pdf::getText, потому что есть способы определить, является ли путь DIR или FILE.Таким образом, они могли бы обойти это внутри этого метода.Я понятия не имею, если они делают (возможно, я посмотрю источник и посмотрю).Я посмотрел {кратко}, и не похоже, что они вообще это проверяют.

Имеет смысл.Вот почему я сказал организовать это так, чтобы чем яснее становилось, тем легче читать код.

...