html2fpdf using php jquery and ajax


html2fpdf using php jquery and 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请求是OK的。

我在firebug中得到以下响应:

% pdf - 1.330对象& lt;>endobj4 0对象& lt;>流

r

x�͘��0��}���"BK��e气����交货x��。��Ax_�年代��3. b�我��年代����oJd获得�NN����0���我��l5ān�������DH����L28��。൹����O8 ^ m����e��28我Ē1�NQ = bz��w(�Gl�Ѯ���Z英航美元,8��r���߾�我��= 9�hj¨��l��8 ve�o&�];y xw�����_��' Ey�8 !e��T����ܵ��T���我�F���问题�X8/3�}�̨�> T��~ 5 $

������0��> ?�问:!qH"ۨ"D"xc"���Ԥ�����͇���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�(���5�Eա,ۃ��^���*4QܧAݑ,!*ص�/��毫升/�z '; $ C�����x dPId��ƃ]4�0肽yy����B

还有一大堆…

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

  1. 要转换为PDF的html结构很差,应该检查它。
  2. 如果HTML是这么好,那么问题是在php.ini,在我的情况下,我使用XAMPP的Windows。c:/xampp/php/php.ini, variable register_long_array = Off改为variable register_long_array = On

然后显示IE, Mozilla, Chrome的PDF。

问题是您将内容输出到浏览器,而不是文件。

Try this:

$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这是一个基本的代码,记住检查文件名出于安全原因(永远不要相信用户输入…)。

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

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