10

我正在使用 TCPDF 类来生成 PDF。首先我以 json 格式(jquery)发送一些数据,然后我想用这些数据生成 PDF。

你能告诉我我是否正确。我应该生成 pdf,将其保存在服务器上,然后如果 ajax 调用返回成功,则将用户重定向到此 pdf。是好方法吗?

我有:

$.ajax({
    url: '/pdf/fiele_to_generate_pdf.php',
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: $.toJSON(jsonObj),
    processData: false,
    dataType: 'html',    
    async: false,
    success: function(html) {
        window.location.href = '/pdf/example.pdf';      
    }
});

感谢您的任何建议。

编辑:所以我已经向服务器发送了一个通过 Ajax 制作 pdf 的请求,然后生成了 pdf 文件并保存在服务器上。然后我使用 window.location.href 将用户重定向到这个 pdf。一切正常,但我想避免在服务器上保存文件。有任何想法吗?

4

1 回答 1

12

好的,此脚本将保存文件并显示在浏览器中

诀窍在于使用带有“F”或“I”的输出方法:

$pdf->Output("your path", 'F');  //save pdf
$pdf->Output('file.pdf', 'I'); // show pdf

代码

<?php
class PDF extends TCPDF {
    public function Header (){                       
         $this->SetFont('dejavusans', '', 14);
         $title = utf8_encode('title');
         $subtitle = utf8_encode('sub title');
         $this->SetHeaderMargin(40);            
         $this->Line(15,23,405,23);      
    }

    public function Footer() {
        $this->SetFont('dejavusans', '', 8);
        $this-> Cell (0, 5, 'Pag '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'R', 0, '', 0, false, 'T', 'M');
    }   

    public static function makeHTML ($json){
        $html = '<table border="0.5" cellspacing="0" cellpadding="4">
        <tr>
            <th bgcolor="#DAB926" style="width:3%; text-align:left"><strong>you th</strong></th>      
        </tr>';
        for ($i=0; $i<count($json); $i++)
        {
            $a= $i+1; 
            $html .= '<tr>
                        <td style="width:15%; text-align:left">'.$json[$i]->Name.'</td>
                      </tr>';
        }   
        $html .= '</table>';
        return $html;           
    }   
}

function printReport ($json )
{
    set_time_limit(0);

    $pdf = new PDF("L", PDF_UNIT, "A3",true, 'UTF-8', false);

    $pdf->SetMargins (15, 27, 15, true);
    $pdf->SetFont('dejavusans', '', 8);
    $pdf->SetAutoPageBreak(TRUE,50);
    $pdf->AddPage();

    //create html
    $html = $pdf->makeHTML($json);  


    $pdf->writeHTML($html, false, false, false, false, '');

    if (!file_exists("your path"))
        mkdir("your path");

    $pdf->Output("your path", 'F');  //save pdf
    $pdf->Output('file.pdf', 'I'); // show pdf

    return true;
}

$json = json_decode("your json");
printReport($json);
?>
于 2012-12-04T20:08:28.313 回答