我想在用户浏览器上保存生成的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();
答案 0 :(得分:0)
<强> 8。我使用jQuery生成PDF但它没有显示。
不要使用AJAX请求来检索PDF。
您可以将文件保存到服务器并返回PDF的URL吗?