我正在尝试从上传的pdf文件中获取值。因此,当文件成功上传后,我想从此PDF文件中获取一些具体的数据,例如ID,PurchaseOrderNo和Amount。
到目前为止,我已经接近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文件,但不会获取任何值。
请告诉我如何解决此问题。谢谢您的时间。
答案 0 :(得分:1)
代替此:
$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()
,因为这样就可以了,因为这将返回文件夹名称{minus}-文件名。但是,如果他们检查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。因此,他们可以在该方法中解决此问题。我不知道他们是否这样做(也许我会寻找资料来源,看看)。我{简短地}看了看,看来他们根本没有检查。
说得通。这就是为什么我说要组织它,因为事情越清晰,越容易阅读代码。