Jquery $ .post html на внешний php и распечатайте html в формате PDF. Нужно найти оптимальное решение - PullRequest
0 голосов
/ 06 февраля 2020

Я получаю 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 и печатаю.

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