【问题标题】:html2fpdf using php jquery and ajaxhtml2fpdf 使用 php jquery 和 ajax
【发布时间】:2012-03-01 07:17:46
【问题描述】:

我有以下 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 文件中。然而,什么都没有发生……尽管萤火虫说 php 请求正常,但没有创建 pdf 并且没有显示下载对话框。

我在 firebug 中得到以下响应:

%PDF-1.3 3 0 对象 结束对象 4 0 对象 流

x�͘�r�0��}��b�"BK��qI�e��EX�X��.��Ax_�s��3.b`�I-��s� ���óJd�NN����0����I��l5ā�n������DH����L28��.൹����O8^m����E�� 28IĒ1�NQ=bz��w(�Gl�Ѯ��Z�$BA,8��r���暴�i��=9�-HJ¨��l��8Ve�o&�];xw �y����_��\Ey�8!��T�e����������������:�F���UE�X8/3�}�̨�>�~5T �$

������0��>?�Q:!qH������D��XEC�����Ԥ�����͇���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ݑ,!*ص�/�Ml �/�z\;$C����x�dPId��ƃ]4�0pYYS��� �B

还有一大堆负载……我不知道为什么这不起作用……

【问题讨论】:

    标签: php javascript jquery html ajax


    【解决方案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

    然后它会向您显示 IE、Mozilla、Chrome 的 PDF。我还没有尝试过 safari。

    【讨论】:

      【解决方案2】:

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

      试试这个:

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

      【讨论】:

      • 这不是问题。我已经使用另一个示例进行了此操作。我的目的是让用户下载文件。文档说这是这样做的方法......
      • 这就是问题所在。文档说,如果您使用直接链接到您的页面,这就是这样做的方法。但是在这里,您正在发出 Ajax 请求,并且您不能以这种方式强制下载。您必须将内容写入文件,然后在 responseText 中打印文件名。然后,您必须使用 jquery 打开文件(例如,创建一个隐藏的 iframe,在请求后使用新创建文件的 url 进行更新)。
      • 好的..所以我在 hp 文件的末尾添加了您的代码,但仍然没有任何反应..请参阅我编辑的代码
      • 文件已创建?现在,您必须编写处理 iframe 更新的 jQuery 代码。
      • 我不确定我是否理解..我没有使用 iframe..为什么我必须更新 iframe?...我的服务器上也没有创建文件。
      【解决方案3】:

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

      如果您想使用$pdf-&gt;Output($name, "D") 直接下载文件(不先将其保存在磁盘上),您可以通过创建&lt;form&gt; 并使用输入字段发送data 和filename 来执行您的POST 请求dateString,那么如果您提交表单,则应该开始下载。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-13
        • 2017-02-15
        • 2013-07-07
        相关资源
        最近更新 更多