laravel 5.4,phpword:如何在不强制下载的情况下显示具有只读权限的单词doc?

时间:2017-09-15 17:42:50

标签: php laravel

我是laravel的新手,我使用 phpword 编辑word doc文件。

我希望保存后我可以在只读权限中显示它。

我想直接显示而不强制下载

我尝试了这段代码但强制下载。

这是我的代码:

  public function create()
  {
    $phpWord = new \PhpOffice\PhpWord\PhpWord();
    $section = $phpWord->addSection();
    //Ajouter l'image
    $section->addImage(
      'C:\wamp\www\Stage_2\public\images\mobilis256.png',
      array(
        'width'         => 100,
        'height'        => 100,
        'marginTop'     => -1,
        'marginLeft'    => -1,
        'wrappingStyle' => 'behind'
        ));
    $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
    try {
      $objWriter->save(storage_path('helloWorld.docx'));
    }catch(Exception $e)
    {}
    $filename = 'helloWorld.docx';
    $path = storage_path($filename);
    return Response::make(file_get_contents($path), 200, [
      'Content-Type' => 'application/docx',
      'Content-Disposition' => 'inline; filename="'.$filename.'"'
      ]);
  }

我也试过

return response()->file(storage_path('helloWorld.docx'));

但总是一样的结果。

我应该怎么做,如何以只读权限显示它?

1 个答案:

答案 0 :(得分:1)

我最终得到了解决方案,所以我做的是:

我将文档保存为 html文件,如下所示:

 $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'HTML');
    try {
      $objWriter->save(storage_path('helloWorld.html'));
    }catch(Exception $e)
    {}

然后使用 dompdf :    https://github.com/barryvdh/laravel-dompdf转换html文件    to pdf

 return PDF::loadFile(storage_path('helloWorld.html'))->save(storage_path('helloWorldPdf.html'))->stream('download.pdf');

因此,我可以预览文件而不强制下载,也不会重做工作。

最终代码如下所示:

  use PDF;
  public function create()
  {
  $phpWord = new \PhpOffice\PhpWord\PhpWord();
  $section = $phpWord->addSection();
  //Ajouter l'image
  $section->addImage(
  'C:\wamp\www\Stage_2\public\images\mobilis256.png',
  array(
  'width'         => 100,
  'height'        => 100,
  'marginTop'     => -1,
  'marginLeft'    => -1,
  'wrappingStyle' => 'behind'
  ));
  // Saving the document as HTML file...
  $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'HTML');
  try {
  $objWriter->save(storage_path('helloWorld.html'));
  }catch(Exception $e)
  {}
  return PDF::loadFile(storage_path('helloWorld.html'))->save(storage_path('helloWorldPdf.html'))->stream('download.pdf');
  }
  

如果您想使用 domppdf 进行此转换,请不要这样做:

     

更新作曲家后,在> bootstrap / app.php

中添加以下行注册提供者      

$app->register(\Barryvdh\DomPDF\ServiceProvider::class);

     

要更改配置,请将配置文件复制到config文件夹,然后在bootstrap / app.php中启用它:

     

$app->configure('dompdf');   这里说明了你将得到的那种错误。   https://github.com/barryvdh/laravel-dompdf/issues/192