html2fpdf с использованием php jquery и ajax - PullRequest
1 голос
/ 04 сентября 2011

У меня есть следующий jQuery, который делает запрос к файлу php с именем html2fpdfconverter.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 объектов <> endobj 4 0 объектов <> поток

Xr0} б "BKqIeEXX.Ax_s3.b`I-ы óJdNN0Il5ānDHL28. ൹ О8 ^ тЕ 28IĒ1NQ = BZW (GlѮZ $ Б. А., 8R ߾ я = 9-HJ¨l8Veo &]; XW y _ \ Ey 8! T e ܵ T j: F UE X8 / 3 } ̨ > ~ 5T $

0> 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 ​​(��5�Eա,ۃ��^���*4QܧAݑ,!*ص� / Ml / z \; $ C x dPId ƃ] 4 0pYYS B < Q Z # = [ A ^ ,] кд / hjVHn4ʖ endstream endobj 1 0 obj

Есть еще целый груз ... Я не уверен, почему это не работает ...

Ответы [ 3 ]

1 голос
/ 01 марта 2012

Я решил это.Решение этой проблемы включает в себя две вещи:

  1. HTML-файл, который будет преобразован в PDF, плохо сконструирован и должен его просмотреть.
  2. Если HTML-код такой хороший, тогда проблеманаходится в php.ini, в моем случае я использовал XAMPP для Windows.в c: /xampp/php/php.ini, variable register_long_array = Off измените его на variable register_long_array = On

Затем он показывает вам PDF, как IE, Mozilla, Chrome.Я не пробовал сафари.

0 голосов
/ 04 сентября 2011

Чтобы открыть диалоговое окно загрузки браузеров, вы должны указать браузеру напрямую (или iframe) URL-адрес файла, невозможно открыть диалоговое окно загрузки для загрузки данных, хранящихся в переменной js.

Если вы хотите напрямую загрузить файл (не сохраняя его сначала на диск), используя $pdf->Output($name, "D"), вы можете выполнить запрос POST, создав <form> и используя поля ввода для отправки data, filename и dateString, тогда, если вы отправите форму, загрузка должна начаться.

0 голосов
/ 04 сентября 2011

Проблема в том, что вы выводите содержимое в браузер, а не в файл.

Попробуйте:

$content = $pdf->Output('', true);

$file = fopen($filename, "w");
fwrite($file, $content);
fclose($file);

РЕДАКТИРОВАТЬ:

Когда вы уверены, что файл создан, вы должны обработать открытие вновь созданного PDF-файла с помощью jQuery.Один из способов сделать это - создать 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 Это базовый код, не забудьте проверить имя файла по соображениям безопасности (никогда не доверяйте вводу пользователя ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...