我有以下jQuery向一个名为html2fpdfconverter.php的php文件发出请求:
$("#exportentry").click(function(e){
e.preventDefault();
if(submitted){
//export
var data = $("#container").html();
var filename = "Entry Report.pdf";
var dateString = $("#datepicker").datepicker().val();
$.ajax({
type:"POST",
url: "html2pdfconverter.php",
data: {data:data, filename:filename, date:dateString},
dataType: "json",
success: function(data) {
//get min max dates assigned
alert('success');
}
})
}else{
alert("No Report To Export");
}
});
html2fpdpf.php
<?php
require('html2fpdf.php');
if(isset($_POST['data'])){
$urlcontents = $_POST['data'];
$filename = $_POST['filename'];
$date = $_POST['date'];
convert($urlcontents, $filename, $date);
}
function convert($contents, $name, $currdate){
$pdf=new HTML2FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10, "Entry Report");
$pdf->SetFont('Arial', '', 12);
$pdf->Cell(90,12,'- '. $currdate);
$contents = strip_tags($contents, '<html><body><meta><img><h2><h4><br><div><ul><li><span>');
$pdf->SetY(20);
$pdf->WriteHTML($contents );
$content = $pdf->Output('', true);
$file = fopen($filename, "w");
fwrite($file, $content);
fclose($file);
}
?>
使用firebug我可以看到数据正确发布到php文件。但是,没有任何反应......没有创建pdf,并且尽管firebug说php请求没问题,但没有显示下载对话框。
我在firebug中收到以下回复:
%PDF-1.3 3 0 obj &LT;&GT; endobj 4 0 obj &LT;&GT; 流
XR0} B“BKqIeEXX.Ax_s3.b`I-S óJdNN0Il5ānDHL28。൹O8 ^我28IĒ1NQ= BZW(GlѮZ$ BA,8R߾I = 9-HJ¨l8Veo&安培;]; xw y _ \Ey 8! T e ܵ T j: F UE X8/3 } ̨ &gt; 〜5T $
0&GT; Q:?!QH DXEC
���Ԥ�����͇���hI�cA��l�����ηy�/�՟���rP.���V� T/�u��|���9����U9t�'|IJ��.�c�28+�<ÃX�����U�|�;k�AI�"�[�ȑ��"�6���vYs�����b�)�H퓀�Ph�,���P:T��x�1,,��Ey�b"Mh(��
ti.C4D({{1- } / Ml / z\; $C x dPId ƃ]4 0pYYS B&lt; Q Z # = [ A^ ,] KD /hjVHn4ʖ endstream endobj 1 0 obj
还有更多的负担..我不知道为什么这不起作用......
答案 0 :(得分:1)
我解决了这个问题。 这个问题的解决方案涉及两件事:
variable register_long_array = Off
将其更改为variable register_long_array = On
然后它会向您展示IE,Mozilla,Chrome的PDF。我没有尝试过野生动物园。
答案 1 :(得分:0)
问题是您将内容输出到浏览器而不是文件。
试试这个:
$content = $pdf->Output('', true);
$file = fopen($filename, "w");
fwrite($file, $content);
fclose($file);
修改强>
如果您确定已创建文件,则必须使用jQuery处理新创建的pdf的打开。一种方法是创建一个iframe,每次导出pdf时都会更新。
frame = document.getElementById('exportFrame');
frame.innerHTML = "<iframe src='/path/to/file/File.pdf' frameborder='0' scrolling='no' height='0' width='0'></iframe>";
并将其添加到您的html标记中:
<div id='exportFrame'> </div>
请参阅文档:http://wiki.spipu.net/doku.php?id=html2pdf:en:v4:output 这是一个基本代码,记得出于安全原因检查文件名(永远不要相信用户输入......)。
答案 2 :(得分:0)
要打开浏览器下载对话框,您必须将浏览器直接(或iframe)指向文件网址,这是不可能的 打开下载对话框,下载存储在js变量中的数据。
如果要使用$pdf->Output($name, "D")
直接下载文件(不先将其保存在磁盘上),可以通过创建<form>
并使用输入字段发送data
来执行POST请求},filename
和dateString
,如果您提交表单,则应开始下载。