查看来自ajax请求的{pdf}报告

时间:2017-08-23 20:14:41

标签: javascript php jquery ajax codeigniter

我在使用TCPDF库生成pdf时遇到问题,并尝试按照这里的一些示例进行操作,但我还没有设法解决我的问题,就是这样:当我点击按钮时我正在制作一个AJAX request使用CODEIGNITER向php中的控制器发送参数和url点,该参数用于执行我的查询并根据它生成报告。我已经使用静态参数调试了报告,看它是否有效并且没有使用AJAX,一切都很顺利。问题是我需要以这种方式发送数据,我不知道如何加载在我的请求的响应中创建的pdf文件,任何想法?



$("#BtnDownload").click(function (){
    var jsonString = 2; //Example parameters;
        $.ajax({
          type: 'POST',
          url: baseurl+"reports/selectReport",
          data: {'data': jsonString},
          success: function(response){
           //What my driver should return
          }
        });
 });




这是我的控制器中的函数,我指向我的ajax请求,我没有把我的报告布局的所有代码都因为它正常工作,并且代码很长,重要的是要知道如何返回我生成的报告并可以从浏览器中查看。



public function selectReport(){
      $this->load->library('Pdf');
        $pdf = new Pdf('L', 'mm', 'A4', true, 'UTF-8', false);
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetTitle('report');
        $pdf->SetSubject('Report PDF');
        $pdf->SetKeywords('TCPDF, PDF, example, test, guide');
        $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
        $pdf->setPrintHeader(false);
        $pdf->setFooterData($tc = array(0, 64, 0), $lc = array(0, 64, 128));
        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
        $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
        $pdf->SetFont('dejavusans', '', 12, '', true);
        
        $base_url = base_url();
        $data = $this->input->post("data");

        // report body

      
        $name_pdf = utf8_decode("report.pdf");
        $pdf->Output($name_pdf, 'I');
    }




1 个答案:

答案 0 :(得分:1)

在TCPDF中(根据TCPDF Save file to folder?),PDF可以保存:

*(p1 +i)

由于您知道PDF位于pdf目录中:

$dir = 'pdfs/';
$filename = 'report' . microtime(TRUE) . '.pdf';

if( ! is_dir( FCPATH . $dir ) )
    mkdir( FCPATH . $dir, 0777, TRUE );

$pdf->Output( FCPATH . $dir . $filename, 'F'); // F saves to filesystem

然后在你的ajax成功函数中,data.url是文件的URL:

$this->load->helper('url');
echo json_encode(array(
    'path' => FCPATH . $dir . $filename,
    'url'  => base_url( $dir . $filename )
));

确保您的$ .ajax具有dataType的配置:' json'。

success: function(response){
    if( response.url ){
        window.location = response.url;
    }
}