FPDF - 通过Javascript下载文件而不保存在服务器上

时间:2018-03-19 13:13:08

标签: javascript php fpdf

我想在用户浏览器上保存生成的pdf文件,但是直接将文件发送到浏览器,而不是使用临时文件。 PHP脚本需要来自JS的一些信息,因此我使用POST将其发送到PHP脚本(使用FPDF)。 下载后我也使用间隔来制作一些东西。 对于此测试脚本,我想要使用所有使用的功能。但只下载PDF不起作用。 Firefox中的PDF文档正在打开,但有3个空白页面。 在Chrome上,它会打开一个新的空白窗口。

的Javascript(HTML):

 <html>
        <head>
            <meta charset="utf-8">
            <script>
                var clr_timersControl = new Array();
                clr_timersControl['pdfGenerate'] = 0;
                var i = 0;
                var formData = new FormData();

                var xmlHttp = new XMLHttpRequest();

                formData.append('name', name);

                xmlHttp.onreadystatechange = function() {
                    if(xmlHttp.readyState === 4 && xmlHttp.status === 200) {
                        var pdf = xmlHttp.responseText;        

                        var batch = window.open(
                            'data:application/pdf,'+encodeURIComponent(pdf),
                            'Batch Print',
                            'width=600,height=600,location=_newtab'
                         );
                        clr_timersControl['pdfGenerate'] = 1;
                    }
                }
                xmlHttp.open('post', 'test2.php'); 
                xmlHttp.send(formData);

                var interval = setInterval(function(){
                    console.log(i++);
                    if ( window.clr_timersControl['pdfGenerate'] === 1) {
                        //do something after download pdf file
                        clearInterval(interval);
                    }
                }, 200);
            </script>
        </head>
        <body>
            Text text.
        </body>
    </html>

PHP脚本:

<?php
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename='downloaded.pdf'");

require('./clr_php/fpdf.php');

class PDF extends FPDF
{

function Header()
{
    $this->Image('./clr_data/nemoxx/logo.jpg',10,6,30);
    $this->SetFont('Arial','B',15);
    $this->Cell(80);
    $this->Cell(30,10,'Title',1,0,'C');
    $this->Ln(20);
}

function Footer()
{
    $this->SetY(-15);
    $this->SetFont('Arial','I',8);
    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}

$pdf = new PDF('L','mm','A4');
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for($i=1;$i<=40;$i++) {
    $pdf->Cell(0,10,'Printing line number '.$i,0,1);
}

header('Content-Length: '.strlen($pdf));
$pdf->Output('','I');
exit();

1 个答案:

答案 0 :(得分:0)

  

<强> 8。我使用jQuery生成PDF但它没有显示。

     

不要使用AJAX请求来检索PDF。

     

http://www.fpdf.org/en/FAQ.php

您可以将文件保存到服务器并返回PDF的URL吗?