EDIT: DOMPDF is optional. Any other solution for printing a PDF file from a DIV is welcome.
I have a web application based on a single DOM page that loads once upon login.
Then each action on the page launches a div to load various content and php pages to interact with mysql using PDO and AJAX.
My problem is this:
Each php page will only display HTML code that should match this DIV.
One of the requirements of the user is the ability to print PDF, taking into account only a specific DIV (main with content). I chose DOMPDF to do the job, but it requires a valid html markup to complete it, not just the section.
My idea: adding a flag to select the PDF format. I use the same ajax call, but redirect it to a new php page that will reflect the full html markup.
The fact is that the result should open on a new page (or in iframe ??), which should be correctly parsed by the DOM PDF.
How to do it?
My actual AJAX call:
$('#livesearch').on("click",'a', function(event){
event.preventDefault();
var tip = $(this).attr("href");
var descr = $(this).text();
$('#anag_search').val(descr);
$('#livesearch').hide();
if ($('#pdfprint').prop('checked')) {
$('#upper').load('sofferenze/soff_pdf.php?soff='+tip);
}else{
$('#upper').load('sofferenze/soff.php?soff='+tip);
}
});
This loads the soff_pdf.php page into the same div as a regular ajax call.
How to say "open in new window"? Or is there a better way to get what I'm looking for? off_pdf.php (corresponding part):
<?php
require '../../session_handler.inc.php';
require_once '../../global_functions.php';
require_once '../../dompdf/dompdf_config.inc.php';
session_start();
$actusr = $_SESSION['id'];
$id_soff = $_GET['soff'];
$soff_name = soff2name($id_soff,$pdo);
?>
<?php ob_start(); ?>
<!DOCTYPE html>
<html>
<head>
<meta content="charset=utf-8" />
<title>DEVELOPMENT SYSTEM</title>
<link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen" />
<link rel="stylesheet" type="text/css" href="../../css/style_print.css" media="print"/>
<script type="text/javascript" src="../../js/jquery-1.9.1.min.js"></script>
</head>
<body>
<br><br>
<div id="accordion">
<h3>Crediti inclusi nella sofferenza</h3>
<div>
<table class="report">
<caption class="report">Crediti Chirografari</caption>
<thead>
<tr>
<th class="report">Sofferenza</th>
<th class="report">GBV</th>
<th class="report">Data GBV</th>
<th class="report">Titolare</th>
<th class="report">Serie</th>
<th class="report">Data Acq.</th>
<th class="report">Cedente</th>
<th class="report">Tipo</th>
<th class="report">Originator</th>
<th class="report">Stato</th>
</tr>
</thead>
<tbody>
<?php if(count($crediti_chiro) >0){ foreach($crediti_chiro as $credito_chiro){ ?>
<tr>
<td class="report"><?php echo soff2name($credito_chiro['cod_soff'],$pdo); ?></td>
<td class="report"><?php echo num2cur($credito_chiro['gbv_tot']); ?></td>
<td class="report"><?php echo mysql2table($credito_chiro['gbv_data']); ?></td>
<td class="report"><?php echo get_name('veicoli',$credito_chiro['titolare'],'nome',$pdo); ?></td>
<td class="report"><?php echo get_name('serie',$credito_chiro['cod_serie'],'serie',$pdo); ?></td>
<td class="report"><?php echo mysql2table($credito_chiro['data_acq']); ?></td>
<td class="report"><?php echo prot2name($credito_chiro['cedente'],$pdo); ?></td>
<td class="report"><?php echo get_name('diz_cred',$credito_chiro['tipo'],'descrizione',$pdo); ?></td>
<td class="report"><?php echo prot2name($credito_chiro['originator'],$pdo); ?></td>
<td class="report"><?php echo $credito_chiro['stato']; ?></td>
</tr>
<?php }}else{ ?>
<td class="report" colspan="10">Nessun credito chirografario caricato</td>
<?php }?>
</tbody>
</table>
<br><br>
</div>
</body></html>
<?php
$html = ob_get_clean();
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("sample.pdf");
?>