Ho un cookie che contiene un certo numero di righe. Per ogni riga ci sono dati di tipo differente che fanno capo ad un’anagrafica specifica. Il mio obiettivo è prendere dalla prima riga l’id_anagrafico in modo da interrogare il DB per ottenere tutti i dati che mi servono e scriverli sulla prima pagina di un file pdf, poi devo continuare ad iterare le righe ed estrarre i dati che a blocchi di 5 devo inserirli sulla seconda e terza pagina del pdf.
Il codice che ho scritto è in errore perché vorrei generare un unico pdf che contenga i dati come detto sopra. Il primo problema è legato al primo foreach che mi genera più file per quante righe contiene, il secondo problema è legato all’addPage() contenuto nel secondo foreach, il terzo problema è la gestione della scrittura dei dati sulla seconda e terza pagina.
Questo è parte del codice che ho scritto:
// Controlla se il cookie è stato impostato
if (isset($_COOKIE[‘righe_selezionate_cookie’])) {
// Recupera il valore del cookie
$righe_selezionate_serialized = $_COOKIE['righe_selezionate_cookie'];
// Deserializza il valore del cookie
$righe_selezionate = unserialize($righe_selezionate_serialized);
// Controlla se la deserializzazione è avvenuta con successo
if ($righe_selezionate !== false) {
// vediamo quante righe ci sono nel cookie
$numero_di_righe = count($righe_selezionate);
// prima del caso numero righe > 1 Creo un’istanza di FPDI
$pdf = new Fpdi(‘P’, ‘mm’, ‘A4’);
$link="./include/";
$file_name="RINNOVO_SORGENIA_MULTI_EE.pdf";
$FILE=$link.$file_name;
// Importa il file PDF esistente
$pageCount = $pdf->setSourceFile($FILE);
$page1 = $pdf->importPage(1);
$page2 = $pdf->importPage(2);
$page3 = $pdf->importPage(3);
if($numero_di_righe > ‘1’) {
// caso di numero di righe nel cookie maggiore di uno.
$prima_riga_elaborata = false; // Flag per controllare se la prima riga è stata elaborata
// Itera attraverso ogni riga
foreach ($righe_selezionate as $riga) {
// Decodifica la riga JSON in un array associativo
$riga_array = json_decode($riga, true);
// Assegna i singoli dati della riga a variabili separate. poi li uso per l'update
$id_contr = $riga_array['id_contr'];
$ragione_sociale = $riga_array['ragione_sociale'];
$pod = $riga_array['pod'];
$data_inizio_contr = $riga_array['data_inizio_contr'];
// stampo per verificare che tutti i dati dell'array sono corretti
echo "Id Contratto: $id_contr<br>";
echo "Ragione Sociale: $ragione_sociale<br>";
echo "POD: $pod<br>";
echo "Data Inizio Contratto: $data_inizio_contr<br>";
echo "<br>";
if (!$prima_riga_elaborata) {
// eseguo la query per i dati dal database
$query="SELECT `id_lux`, `id_ana_lux`, `id_contr_lux`, `cons_annuo_lux`......
FROM `Tb_Off_Power`
inner join `Tb_Contratti` ....
inner join `Tb_Anagrafica` ......
WHERE `pod`='$pod' and `id_contr_lux`= '$id_contr' and `data_inizio_contr` = '$data_inizio_contr' limit 1 ";
$stmt1=$connessione->prepare($query);
$stmt1->execute();
$riga1 = $stmt1->fetch(PDO::FETCH_ASSOC);
$id_ana_lux=$riga1['id_ana_lux'];
$id_contr_lux=$riga1['id_contr_lux'];
// Aggiungi una nuova pagina al PDF
$pdf->AddPage();
// Usa la pagina importata
$pdf->useImportedPage($page1);
// Setta il font Arial, stile normale, dimensione 9
$pdf->SetFont('Arial', '', 9);
// Imposta il colore del testo (nero)
$pdf->SetTextColor(0, 0, 0);
$pdf->SetXY(34, 26.3); // Imposta la posizione del testo RAGIONE SOCIALE
$pdf->Cell(0, 10, "$ragione_sociale", 0, 1); // Inserisce il testo
............
$prima_riga_elaborata = true; // la prima riga è stata elaborata
}else{
$query2="SELECT `id_lux`, `id_ana_lux`, `id_contr_lux`, `cons_annuo_lux`,
FROM `Tb_Off_Power`
inner join `Tb_Contratti` ....
inner join `Tb_Anagrafica`......
WHERE `pod`='$pod' and `id_contr_lux`= '$id_contr' and `data_inizio_contr` = '$data_inizio_contr' ";
// questo dopo va rimesso al posto suo
$stmt1=$connessione->prepare($query2);
$stmt1->execute();
$righe = $stmt1->fetchAll(PDO::FETCH_ASSOC);
// Contatore per blocchi di 5 righe
$row_counter = 0;
//if ($pdf == null) {echo "LA VARIABILE PDF E' DIVENTATA NULLA PER TALE MOTIVO NON POSSO CONTINUARE"; exit; }
foreach ($righe as $riga1) {
if ($row_counter == 5) {
$pdf->AddPage();
$pdf->useImportedPage($page3);
$row_counter = 0;
}
$pdf->AddPage();
$pdf->useImportedPage($page2);
// ora scrivo il file
// Setta il font Arial, stile normale, dimensione 9
$pdf->SetFont('Arial', '', 9);
// Imposta il colore del testo (nero)
$pdf->SetTextColor(0, 0, 0);
// Imposta lo spazio tra il margine inferiore e il testo a 5 mm
$pdf->SetAutoPageBreak(true, 5);
//PRIMO MULTICONTRATTO
$pdf->SetXY(37, 72.2); // Imposta la posizione del testo INDIRIZZO
$pdf->Cell(0, 10, $riga1['indirizzo_forn'], 0, 1); // Inserisce il testo
...............
$row_counter++;
//SECONDO MULTICONTRATTO
$pdf->SetXY(37, 72.2); // Imposta la posizione del testo INDIRIZZO
$pdf->Cell(0, 10, $riga1['indirizzo_forn'], 0, 1); // Inserisce il testo
...............
$row_counter++;
//TERZO MULTICONTRATTO
$pdf->SetXY(37, 120.1); // Imposta la posizione del testo INDIRIZZO
$pdf->Cell(0, 10, $riga1['indirizzo_forn'], 0, 1); // Inserisce il testo
...............
$row_counter++;
//QUARTO MULTICONTRATTO
$pdf->SetXY(37, 167.9); // Imposta la posizione del testo INDIRIZZO
$pdf->Cell(0, 10, $riga1['indirizzo_forn'], 0, 1); // Inserisce il testo
...............
$row_counter++;
//QUINTO MULTICONTRATTO
$pdf->SetXY(37, 215.7); // Imposta la posizione del testo INDIRIZZO
$pdf->Cell(0, 10, $riga1['indirizzo_forn'], 0, 1); // Inserisce il testo
...............
$row_counter++;
}// chiusura foreach delle pagine multisito
} // chiusura del braccio else della if prima riga elaborata
//$pdf->Output(); // Visualizza il PDF nel browser
$pdf->Output("RINNOVO_SORGENIA_MULTI_EE_$pod.pdf",'F');
$file_path = "RINNOVO_SORGENIA_MULTI_EE_$pod.pdf";
if (file_exists($file_path)) {
// distruggo l'oggetto Fpdi
$pdf = null;
echo '<strong><font color= "red">Il file del rinnovo è stato generato e salvato sul Nas....</font></strong><br>';
} else { echo "Si è verificato un errore durante il salvataggio del file."; }
} //chiusura foreache
} // chiusura del caso di $numero di righe maggiore di 1
} else { echo “Errore durante la deserializzazione del cookie.”; } // righe_selezionate diverso da false
} // chiusura isset cookie
1