2016-02-18 3 views
1

в моем симфони проекта я использую библиотеку HTML2PDF, и у меня есть этот код в моем контроллере:проблемы с Symfony html2pdf не оказывающим PDF

$html = $this->render('MyBundle:MyFolder:myPDF.html.twig', array('slug' => $slug)); 

$html->getContent(); 

try { 
    $html2pdf = new \Html2Pdf_Html2Pdf('P', 'A4', 'fr', true, 'UTF-8'); 
    $html2pdf->pdf->SetAuthor('....'); 
    $html2pdf->pdf->SetDisplayMode('real'); 
    $html2pdf->writeHTML($html); 
    $html2pdf->Output('Bill.pdf'); 
    $response = new Response(); 

    $response->headers->set('Content-type', 'application/pdf'); 

    return $response; 

} catch(HTML2PDF_exception $e) { 

    die($e); 
} 

Ошибки не встречается, здесь, но это делает меня это:

enter image description here

Таким образом, контроллер не возвращает правильный pdf-файл.

Почему вывод html PDF-вывода такой?

Это мнение я хотел бы сделать в формате PDF:

<!DOCTYPE html> 
<html lang="fr"> 
    <head> 
     <meta name="description" content="Bill"> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
    </head> 

    <body> 
     <table> 
      <thead> 
       <tr> 
        <th>test</th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>test</td> 
       </tr> 
      </tbody> 
     </table> 
    </body> 

Это ответ возврата заголовков в браузере:

HTTP/1.1 500 Internal Server Error 
Date: Thu, 18 Feb 2016 13:05:16 GMT 
Server: Apache/2.4.9 (Win64) PHP/5.5.12 
x-powered-by: PHP/5.5.12 
Cache-Control: public, must-revalidate, max-age=0, no-cache 
Pragma: public 
Expires: Sat, 26 Jul 1997 05:00:00 GMT 
Last-Modified: Thu, 18 Feb 2016 13:05:17 GMT 
Content-Length: 2198 
Content-Disposition: inline; filename="Bill.pdf"; 
X-Debug-Token: 5e207b 
X-Debug-Token-Link: /symfony/web/app_dev.php/_profiler/5e207b 
Connection: close 
Content-Type: text/html; charset=UTF-8 

Как вы можете видеть, тип содержимого это не приложение/pdf.

ответ

1

Я думаю, что вы должны возвратить специальный тип ответа

use Symfony\Component\HttpFoundation\BinaryFileResponse; 
use Symfony\Component\HttpFoundation\ResponseHeaderBag; 
.... 
$response = new BinaryFileResponse('/file/path/file.pdf'); 
$response->setContentDisposition(
    ResponseHeaderBag::DISPOSITION_INLINE, 
    'file.pdf', 
    iconv('UTF-8', 'ASCII//TRANSLIT', 'file.pdf') 
); 

return $response; 
+0

'BinaryFileResponse' возвращает мне то же самое. Благодарим за ваше предложение. –

+0

попытайтесь установить вручную настройку содержимого - я обновил свой ответ. –

+0

вместо $ this-> render использовать $ this-> renderView, он вернет вам строку вместо объекта Response. Может быть, это что-то с ответом. И покажите нам свой ответ http headers. –

0

Я была такая же проблема, потому что мой файл был закодирован в UTF-8 с BOM. Если у вас есть блокнот ++, просто откройте файл PHP и посмотрите на кодировку. Затем выберите конвертировать в UTF-8 без спецификации.

Это специальный символ, который включен в начало файла PHP.

+0

Я попробовал ваше предложение, но результат все тот же. –

Смежные вопросы