html2fpdf使用php jquery和ajax

时间:2011-09-04 00:16:49

标签: php javascript jquery html ajax

我有以下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

还有更多的负担..我不知道为什么这不起作用......

3 个答案:

答案 0 :(得分:1)

我解决了这个问题。 这个问题的解决方案涉及两件事:

  1. 将转换为PDF的html构造不良,应该对其进行审核。
  2. 如果HTML很好,那么问题出在php.ini中,在我的例子中我使用了XAMPP for Windows。 在c:/xampp/php/php.ini, variable register_long_array = Off 将其更改为variable register_long_array = On
  3. 然后它会向您展示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'>&nbsp;</div>

请参阅文档:http://wiki.spipu.net/doku.php?id=html2pdf:en:v4:output 这是一个基本代码,记得出于安全原因检查文件名(永远不要相信用户输入......)。

答案 2 :(得分:0)

要打开浏览器下载对话框,您必须将浏览器直接(或iframe)指向文件网址,这是不可能的 打开下载对话框,下载存储在js变量中的数据。

如果要使用$pdf->Output($name, "D")直接下载文件(不先将其保存在磁盘上),可以通过创建<form>并使用输入字段发送data来执行POST请求},filenamedateString,如果您提交表单,则应开始下载。