Я получаю mysql данные.
Создать - отобразить данные mysql как html.
Если посетитель хочет распечатать данные в формате PDF (я имею в виду создать PDF файл и сохранить на компьютере), я с jquery взять данные и отправить во внешний php файл. Во внешнем файле php, используя решение http://www.tcpdf.org
, я хочу создать файл PDF (на лету, только как переменную; я не хочу сохранять файл на моем сервере), чтобы пользователь мог сохранить его.
Пользователь остается на том же URL-адресе, сразу после того, как пользователь нажимает кнопку, я предлагаю пользователю сохранить отрендеренный PDF. Я не хочу изменять URL-адрес или добавлять html содержимое к URL-адресу (например, print_pdf.php?html_content
).
В настоящее время я использую код, подобный приведенному ниже.
<div id="to_print_as_pdf">
<div>Some content from mysql</div>
<table>Another content from mysql</table>
</div>
<button type="button">Click to print as pdf</button>
<span id="result_print_pdf"></span>
Jquery для отправки данных
<script>
$("button").click(function(){
$.post('_prepare_to_print_pdf.php',
{ content_to_print: $('#to_print_as_pdf').html() },
function(result_print_pdf) {
$('#result_print_pdf').html(result_print_pdf).css('color', 'black');
});
});
</script>
Файл _prepare_to_print_pdf.php
$_SESSION['content_to_print'] = trim($_POST['content_to_print']);
<script>
window.location.href = "https://www.example.com/_print_pdf.php";
</script>
Файл _print_pdf.php
//Use http://www.tcpdf.org solution
$html = $_SESSION['content_to_print'];
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
$pdf->Output('example_001.pdf', 'I');
Как сделать то же самое без _prepare_to_print_pdf.php
? Выше решение тратит ресурсы сервера (на создание сеанса).
Я пытался с $.post
отправить html контент напрямую на _print_pdf.php
, но в таком случае вместо запроса сохранить файл PDF, я вижу " фигня "символов ...
Решение на данный момент
Может быть кому-то поможет
$('#for_hidden_form_for_print_pdf').append('<form action="_print_pdf.php" method="post" target="_blank" id="hidden_form_for_print_pdf">' +
'<textarea id="content_to_print" name="content_to_print">html content to send </textarea>' +
'<div><button style="display: none;" id="btn_to_print_pdf">Print pdf</button></div></form>');
$('#btn_to_print_pdf').trigger('click');
$( "#hidden_form_for_print_pdf" ).remove();
Так что, когда посетитель нажимает кнопку / значок Я беру необходимые html данные, вставляю в textarea id="content_to_print"
. Затем нажмите кнопку btn_to_print_pdf
, затем удалите добавленную форму. Поэтому я отправляю на внешний php файл, необходимый html код. В файле php я обрабатываю код html, создаю содержимое для файла PDF и печатаю.