我在使用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');
}

答案 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;
}
}