【问题标题】:mikehaertl\pdftk\Pdf Nullmikehaertl\pdftk\Pdf 空
【发布时间】:2018-05-23 14:31:56
【问题描述】:

我正在开发一个 Laravel 应用程序,我正在尝试使用 mikehaertl\pdftk\Pdf 从 PDF 文件中检索字段,但它总是返回 NULL。

 public function postPdF(Request $request ){
    $file = $request->file('test');
    $content = fopen($file->getRealPath(),'r');
    $name = $file->getClientOriginalName();
    $extension = \File::extension($name);
    $newName = time().".".$extension;
    Storage::disk("local")->put($newName,$content);
    $pathF =  storage_path('app')."\\".$newName; 

    $pdf = new Pdf($pathF);
    $data = $pdf->getDataFields();

}    

如果我这样做

var_dump($pdf)  

返回

string(0) ""    

如果我这样做了

var_dump($data)   

返回

bool(false)    

我该如何解决这个问题?

【问题讨论】:

  • 那么你想用你的fopen 电话做什么?我建议为此坚持使用 Laravel 的生态系统 (Retrieving Files)
  • 在代码的第一部分,我试图存储 pdf 文件以排除它是路径问题。

标签: php laravel pdf laravel-5


【解决方案1】:

从 getDataFields() 接收到 false 作为返回值表示执行命令时发生了故障。需要检查的几件事:

  1. pdftk 安装了吗?
  2. 我必须在 Pdf 类构造函数的选项中指定 pdftk 二进制文件所在的位置。

    $pdf = new Pdf(
               $pathToPdf, 
               ['command' => $pathToPdfTKBinary]
    );
    

    我在documentation for shell commmand 中遇到过。

【讨论】:

    【解决方案2】:

    fopen(本质上)返回指向文件的指针,而不是文件内容。这意味着当您将$content 放入文件时,它并没有按照您的意图进行。

    虽然您可以将 fopen 替换为 file_get_contents,但我建议您只需替换以下几行...

    $file = $request->file('test');
    $content = fopen($file->getRealPath(),'r');
    $name = $file->getClientOriginalName();
    $extension = \File::extension($name);
    $newName = time().".".$extension;
    Storage::disk("local")->put($newName,$content);
    

    ...类似...

    $destPath = storage_path('app') . '/' . time() . '.' . $request->test->extension();
    
    Storage::disk('local')
      ->copy($request->test->path(), $destPath);
    

    【讨论】:

    • 我改变了行,但它仍然返回 bool(false)
    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 2013-12-25
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2017-05-03
    • 2013-09-16
    • 2013-05-15
    相关资源
    最近更新 更多