2016-12-02 1 views
0
내가 미리이 코드를 사용하여 주문 송장의 PDF를 다운로드 할

:PDF 데이터가 표시되지만 다운로드 한 파일이 없습니다

public function generatePDFByIdOrder() 
    { 
     $order = new Order(1); //I want to download the invoice PDF of $order_id '1' 
     if (!Validate::isLoadedObject($order)) { 
      throw new PrestaShopException('Can\'t load Order object'); 
     } 

     $order_invoice_collection = $order->getInvoicesCollection(); 
     $this->generatePDF($order_invoice_collection, PDF::TEMPLATE_DELIVERY_SLIP); 
    } 

    public function generatePDF($object, $template) 
    { 
     $pdf = new PDF($object, $template, Context::getContext()->smarty); 
     $pdf->render(); 
    } 

를 다음 코드로 호출 : $order = new order(); echo $order->generatePDFByIdOrder();

나는 PDF 파일의 데이터가 브라우저 콘솔에 인쇄되었지만 다운로드되지는 않았습니다. enter image description here

어떻게 데이터를 조작하여 pdf 파일을 다운로드 할 수 있습니까?

+1

당신은 아마 적절한'헤더()' – Jakuje

답변

1

PrestaShop use TCPDF. 이 방법으로

편집 generatePDF : PDF 파일 것

header("Content-type:application/pdf"); 

그러나 "다운로드"

public function generatePDF($object, $template) 
{ 
    $pdf = new PDF($object, $template, Context::getContext()->smarty); 
    $pdf->Output('name.pdf', 'I'); 
} 
+0

이상한, 나는 catch되지 않은 오류 '가 추가해야합니다 : 정의되지 않은 방법 PDF에 전화를 :: 출력) (이하

generateInvoice() 함수는 것 '. – androniennn

+0

PrestaShop 버전? –

+0

1.6.1.9 버전. – androniennn

0

당신은과 같이 TCPDF으로 PDF를 렌더링하기 전에 적절한 헤더를 설정해야 할 것 같아요 사용자의 브라우저 설정에 따라 달라집니다. 다운로드 할 수도 있고 (이 경우 Content-Disposition:attachment이라는 다른 헤더를 설정해야 할 수도 있습니다) 브라우저에 표시하십시오.

+0

'$ pdf-> render();'를'output'으로 변경하지 않아야합니까? – androniennn

0

별도의 컨트롤러를 만들어 PDF 파일을 렌더링하고 해당 컨트롤러를 항상 새 탭에서 열어 보는 것이 좋습니다. 그것은 당신이 DOMPDF 라이브러리를 사용하여 별도의 논리를 가지고 도움이 될 것입니다. 이 예 SuperCheckout 모듈 이름 (invoice.php)

include_once(_PS_MODULE_DIR_.'supercehckout/libraries/dompdf/dompdf_config.inc.php'); 

class SuperCheckoutInvoiceModuleFrontController extends ModuleFrontController 
{ 
    public function initContent() 
    { 
       parent::initContent(); 
       $this->generateInvoice(ORDER_ID); 
    } 
} 

참고 다음

송장 컨트롤러 것이다.

function generateInvoice($order_id) 
{ 
     $dompdf = new DOMPDF(); 
     $html = utf8_decode(INVOICE_HTML); 
     $dompdf->load_html(INVOICE_HTML); 
     $dompdf->render(); 
} 
관련 문제