簡體   English   中英

Symfony2:在瀏覽器中打開 PDF 文件

[英]Symfony2: Open PDF file in browser

在我的 Symfony 2 項目中,當用戶單擊用於查看 pdf 文件的鏈接時,我想在瀏覽器中顯示 pdf。 pdf 文件包含在我的“views”文件夾中,位於名為“pdf-files”的子文件夾中。

我需要如何調整以下 controller function 以便在瀏覽器中顯示 pdf 文件?

/**
 * @Route("/pdf/{pdfFilename}")
*/
public function pdfAction($pdfFilename) {
   return $this->render('@App/pdf-files/'.$pdfFilename);
}

這都是關於http請求的內容類型標頭的。 所以只需設置:

$response = $this->render('@App/pdf-files/'.$pdfFilename);
$response->headers->set('Content-Type', 'application/pdf');

return $response;

要提供靜態文件,您可能需要使用BinaryFileResponse類。 在這種響應中,您可以設置content disposition -該文件應在瀏覽器中打開還是作為附件下載。

因此,您的代碼應類似於:

public function pdfAction($pdfFilename)
{
   $kernel = $this->get('kernel');
   $path = $kernel->locateResource('@AppBundle/Resources/pdf-files/'.$pdfFilename);

   $response = new BinaryFileResponse($path)

   $response->headers->set('Content-Type', 'application/pdf');
   $response->setContentDisposition(
      ResponseHeaderBag::DISPOSITION_INLINE, //use ResponseHeaderBag::DISPOSITION_ATTACHMENT to save as an attachement
      $pdfFilename
   );

   return $response;
}

編輯:由於默認情況下locateResourceResources目錄下尋找文件,我建議將您的pdf-files目錄從views目錄移至Resources

在這里從 Tomasz 的回答中獲得幫助是使其工作的另一種方法,在這種情況下,它讓您從資產目錄中讀取文件。 這個工程在 Symfony 4 以后。

    //Imports used
    use Symfony\Component\Asset\Package;
    use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
    use Symfony\Component\HttpFoundation\BinaryFileResponse;
    use Symfony\Component\HttpFoundation\ResponseHeaderBag;


    $package = new Package(new EmptyVersionStrategy());
    $path = $package->getUrl('assets/pdf/pdffilename.pdf');
    $response = new BinaryFileResponse($path);

    $response->headers->set('Content-Type', 'application/pdf');
    $response->setContentDisposition(
        ResponseHeaderBag::DISPOSITION_INLINE,
        "pdf-name-at-the-time-of-download.pdf"
    );

    return $response;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM