【问题标题】:CakePHP 1.3 and TCPDF: how to return to controller after printing PDFCakePHP 1.3 和 TCPDF:打印 PDF 后如何返回控制器
【发布时间】:2013-02-26 18:04:32
【问题描述】:

我正在使用 CakePHP 1.3 和 TCPPDF 使用 print_pdf.ctp 打印 PDF 文件。打印后,我无法将页面重定向到引荐来源网址。未达到控制器操作的注释部分。我该如何管理?

请注意,print_pdf() 链接到一个按钮。因此,用户加载一个页面,按下链接到print_pdf 操作的“打印”按钮,单击此按钮时会打印一个 PDF 文件。我想重定向的原因是print_pdf 操作更新了一些数据,并且需要刷新按钮所在的页面以反映此更新。

控制器:

// This action is linked to a button
function print_pdf() {
    ...    
    $this->layout = 'pdf'; //this will use the pdf.ctp layout
    $this->render();   

    // Line below are not executed
    ...
    $this->redirect($this->referer());
}

【问题讨论】:

  • 一旦你点击渲染,它就会加载页面。您可以在转到 PDF 之前进行这些更改吗?或者,您是否可以打开一个新选项卡/窗口,进行更改,然后关闭该选项卡?
  • 如果我在渲染之前重定向页面,它不会打印 PDF。我也尝试过 Javascript,我将页面刷新分配给 print_pdf 按钮,但这也不起作用,因为在执行 print_pdf 操作之前页面刚刚刷新。我必须在print_pdf 视图中重定向吗? (这似乎不太合适)
  • 您可能必须通过使用 JavaScript 的 AJAX 调用来执行此操作;点击按钮;向服务器发送 Ajax 调用并更新数据库,当 Ajax 调用返回“成功”时,更新信息并打开 PDF

标签: cakephp tcpdf


【解决方案1】:

我仍然不能完全确定我理解你想要做什么。您正在尝试重定向到另一个页面以保存一些信息,然后立即向该人显示 PDF?

为什么不直接从 PDF 函数中运行保存您所做的任何事情:

// This action is linked to a button
function print_pdf() {
    ...
    //$this->redirect($this->referer());
    //Put whatever you were going to redirect to before the render.  Instead of  redirecting just run the thing as part of this function.
    ...    
    $this->layout = 'pdf'; //this will use the pdf.ctp layout
    // Line below are not executed
    $this->render();     
}

$this->render();应该逃离控制器并直接进入视图。你不能在它后面放任何东西。如果您想使用按钮对页面进行更改,您可以在渲染之前执行此操作。

【讨论】:

  • 我基本上是重定向到同一页面以刷新页面以反映 PDF 已打印。如果我在渲染之前重定向,则不会出现 PDF 下载提示。我希望用户能够获得“下载”窗口,以便他可以下载 PDF 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 2020-03-29
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多