2016-12-02 125 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使用TCPDF。

编辑generatePDF这样:

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

奇怪,我有'未捕获的错误:调用未定义的方法PDF ::输出() '。 – androniennn

+0

PrestaShop版本? –

+0

1.6.1.9版本。 – androniennn

0

我猜你仅仅使用TCPDF渲染PDF像这样之前设置适当的标题:

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

但是,“下载”一个PDF会取决于用户的浏览器设置。它可能会下载它们(在这种情况下,您必须设置另一个名为Content-Disposition:attachment的标头)或将其显示在浏览器中。

+0

,我不应该改变'$ pdf-> render();'输出'? – androniennn

0

我们建议您创建一个单独的控制器来渲染PDF文件并始终在新选项卡中打开该控制器。它将帮助您使用DOMPDF库具有单独的逻辑。

发票控制器将如下(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); 
    } 
} 

注:SuperCheckout是该例子的模块名称。

generateInvoice()函数如下:

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