【问题标题】:PDF data displayed but file not downloaded显示 PDF 数据但未下载文件
【发布时间】:2017-04-17 15:13:01
【问题描述】:

我想使用此代码预览和下载订单发票 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 的数据,但没有下载。

我如何操纵这些数据来下载 pdf 文件?

【问题讨论】:

  • 你可能需要添加一个合适的header()

标签: php pdf prestashop tcpdf prestashop-1.6


【解决方案1】:

我们建议您创建一个单独的控制器来呈现 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();
}

【讨论】:

    【解决方案2】:

    我猜你只需要在使用 TCPDF 渲染 PDF 之前设置正确的标题,如下所示:

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

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

    【讨论】:

    • 我不应该把$pdf->render();改成output吗?
    【解决方案3】:

    PrestaShop 使用 TCPDF。

    以这种方式编辑generatePDF:

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

    【讨论】:

    • 奇怪,我有Uncaught Error: Call to undefined method PDF::Output()。
    • PrestaShop 版本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2022-11-02
    • 1970-01-01
    • 2021-09-09
    • 2017-09-03
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多