Compilare moduli in un file pdf da php

di il
18 risposte

Compilare moduli in un file pdf da php

Buonasera,

Ho un file in pdf con nome cognome etc…

con acrobat ho messo i moduli nei campi nei quali scrivere.

Ora, il campo del nome gli ho messo il modulo denominato nome e cosi via.

Esiste una libreria che anziche dargli le coordinate del campo gli dai direttamente il nome del campo/modulo nel quale scrivere quel valore?

Grazie   

18 Risposte

  • Re: Compilare moduli in un file pdf da php

    No, magari. Purtroppo il pdf rimane una immagine e come tale un insieme di pixel più o meno anonimi. Non ti resta che usare le fpdf o pdflib se vuoi affidarti a PHP o jsPDF se passi i dati con ajax al frontend.

  • Re: Compilare moduli in un file pdf da php

    Ni.

    Potresti prendere le coordinate, che conoscerai sicuramente, inserirle in un array ed associargli un alias.

    Al limite attingi da una tabella ad hoc con 

    idpdf; idalias; coordinate; alias.

    Magari se sposti il campo ti aggiorni le cordinate ;)

    Qualcosa del genere… 

    Facci sapere se riesci.

  • Re: Compilare moduli in un file pdf da php

    08/06/2023 - alessandro.vitale ha scritto:


    con acrobat ho messo i moduli nei campi nei quali scrivere.

    Ora, il campo del nome gli ho messo il modulo denominato nome e cosi via.

    Esiste una libreria che anziche dargli le coordinate del campo gli dai direttamente il nome del campo/modulo nel quale scrivere quel valore?

    Se hai inserito dei campi di un form “veraci”, ovvero usando gli appositi oggetti previsti dal formato PDF, certo che puoi fare quanto chiedi.

    Io conosco librerie per Java e C#, come iText, però suppongo che esistano anche soluzioni per librerie in PHP.

    Da una ricerca è emerso questo thread, prova a dare un'occhiata.

  • Re: Compilare moduli in un file pdf da php

    12/06/2023 - Alka ha scritto:


    08/06/2023 - alessandro.vitale ha scritto:


    con acrobat ho messo i moduli nei campi nei quali scrivere.

    Ora, il campo del nome gli ho messo il modulo denominato nome e cosi via.

    Esiste una libreria che anziche dargli le coordinate del campo gli dai direttamente il nome del campo/modulo nel quale scrivere quel valore?

    Se hai inserito dei campi di un form “veraci”, ovvero usando gli appositi oggetti previsti dal formato PDF, certo che puoi fare quanto chiedi.

    Io conosco librerie per Java e C#, come iText, però suppongo che esistano anche soluzioni per librerie in PHP.

    Da una ricerca è emerso questo thread, prova a dare un'occhiata.

    Ciao, che intendi per “veraci”?

    Tramite il tuo LINK ho visto che la LIBRERIA FPDM è stata aggiornata e ora la proverò, perchè molte che ho provato ed installato con composer mi davano incompatibilità con versioni di PDF uguali o superiori a 1.5 (come compressione) e per questo stavo abbandonando l'idea.

    Ora con questa forse forse… visto che pare aggiornata probabilmente sarà compatibile.

    Io devo essere sincero, mi sono fatto aiutare da CHATGPT per la compilazione perchè non sono in grado al 100% di fare quello che intendo fare.

    e comunque io ho questo modello in pdf (allego immagine) che come vedete ho creato i campi MODULO che hanno ciascuno un nome.

    VI FACCIO SAPERE COME VA. 

  • Re: Compilare moduli in un file pdf da php

    12/06/2023 - alessandro.vitale ha scritto:


    Ciao, che intendi per “veraci”?

    Mi riferisco a quello che hai mostrato nello screenshot, ovvero dei campi effettivi presenti nel modulo.

    C'è chi definisce “campi” degli spazi creati appositamente per l'inserimento di un valore, rappresentati solo a livello grafico, che sono diversi dai tipi di campo che hai inserito tu, che sono invece oggetti specifici previsti dal formato PDF e nella maggior parte delle librerie letti, interpretati e resi manipolabili (compilabili) con maggiore facilità, ossia gestiti separatamente, quantomeno più accessibili dell'inserimento grafico di testo in una posizione particolare.

  • Re: Compilare moduli in un file pdf da php

    Ecco sempre allo stesso punto…

    Installo con composer e mi creo un index.php di prova con un solo campo (poi se riesco lo farò funzionare anche con tuttii campi necessari)

    la index.php è questa 

    <?php
    require_once 'vendor/autoload.php';
    
    use tmw\FPDM\FPDM;
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // Ottieni il valore dal campo compilabile
        $nomecognomeLR = $_POST['nomecognomeLR'];
    
        // Carica il template del PDF
        $pdf = new FPDM('domanda.pdf');
        
        // Compila il campo nel PDF con il valore
        $pdf->Load($nomecognomeLR, false);
        
        // Salva il PDF compilato nella stessa directory con un nome specifico
        $pdf->Output('output.pdf', 'F');
    }
    ?>
    
    

    mentre la parte sempre della index.php in html è questa 

    
    <!DOCTYPE html>
    <html>
    <head>
        <title>Compilazione PDF</title>
    </head>
    <body>
        <form action="index.php" method="POST">
            <label for="nomecognomeLR">Nome e cognome:</label>
            <input type="text" name="nomecognomeLR" id="nomecognomeLR" required>
            <br>
            <input type="submit" value="Genera PDF">
        </form>
    </body>
    </html>

    nella parte php dove carica le classi “use tmw\FPDM\FPDM;” ho provato sia senza il tmw che con ma mi da sempre questo errore di caricamento della classe 

    Fatal error: Uncaught Error: Class "tmw\FPDM\FPDM" not found in C:.........\provapdf\index.php:11 Stack trace: #0 {main} thrown in C:.......\provapdf\index.php on line 11

    ho provato tante librerie che magari potessero riuscire a fare questo ma misono sempre scontrato con il mancato caricamento delle classi.

  • Re: Compilare moduli in un file pdf da php

    È un casino….

    ho provato questo codice 

    <?php
    require_once 'fpdm.php';
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // Ottieni il valore dal campo compilabile
        $nomecognomeLR = $_POST['nomecognomeLR'];
    
        // Creazione dell'array dei dati
        $data = array(
            'nomecognomeLR' => $nomecognomeLR
        );
    
        // Carica il template del PDF
        $pdf = new FPDM('domanda.pdf');
        
        // Carica i dati nell'istanza FPDM
        $pdf->Load($data, false); // secondo parametro: false se i valori dei campi sono in ISO-8859-1, true se in UTF-8
        $pdf->Merge();
        
        // Visualizza il PDF nel browser
        $pdf->Output();
    }
    ?>

    con lo stesso html di prima e mi da ora questo errore (ho caricato manualmente la libreria nella stessa directory del progetto) 

    FPDF-Merge Error: Object streams are not supported

    STO IMPAZZENDO!!!!

  • Re: Compilare moduli in un file pdf da php

    12/06/2023 - alessandro.vitale ha scritto:


    STO IMPAZZENDO!!!!

    Purtroppo, ChatGPT non sopperisce a tutte le necessità di sviluppo: bisogna anche sapere quello che si sta facendo, non basta copiare/incollare il codice, e questo contesto ne è una perfetta dimostrazione.

    La soluzione suggerita proviene probabilmente da questo thread: leggi il resto delle osservazioni.

  • Re: Compilare moduli in un file pdf da php

    So bene che chatGPT non può sopperire, ma non saprei proprio (con urgenza) fare quello che devo fare. Studiare iltutto mi ci vorrebbe tanto tempo.

    Nel thread che mi hai linkato (utilissimo) poi lasoluzione mi da 

    FPDF-Merge Error: Object streams are not supported

    esattamente lo stesso errore che riceveval'utente del thread. 

    Poi però applica una soluzione con pdftk con ubuntu MENTRE IO ATTUALMENTE LO STO PROVANDO IN LOCALE SU WINDOWS.

    Quindi non lo riesco più a seguire nelle sue tappe

  • Re: Compilare moduli in un file pdf da php

    CE L'HO FATTAAAAAAAAA

    ho installato pdftk e da terminale ho eseguito pdftk domanda.pdf output domanda1.pdf

    e miha creato il file domanda1.pdf e ora…. 

    ovviamente ho provato solo con 1 campo. 

    ora provvederò a farlo con gli altri!!!

    Grazie mille a tutti. 

    se necessario scrivo quì la soluzione

  • Re: Compilare moduli in un file pdf da php

    Buonasera,

    riprendo la discussione per un problema riguardante il recupero di un valore da un campo, ecco i codici:

    inizio con il php metodo POST

    // Verifica se è stata inviata una richiesta POST
            if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            -------altre stringhe
            $residente_a = $_POST['residente_a'];
            
    // Aggiorna l'array $fields con il nuovo valore
            $fields = array(
            -------altre stringhe
            'residente_a' => $residente_a,
            );
            
         	$pdf = new FPDM('domanda1.pdf');
                	$pdf->Load($fields, false); // second parameter: false if field values are in ISO-8859-1, true if UTF-8
                	$pdf->Merge();
                	$pdf->Output();
           }

    poi passiamo al campo HTML residente_a

    						<div class="col-sm-6">
    						  <p>Residente a:</p>
    						  <div class="border border-secondary rounded p-2">
    							<input type="text" id="residenteA" name="residente_a" class="border-0 w-100" style="outline: none;">
    							<div id="residenteAList"></div>
    						  </div>
    						</div>

    questo campo prende i valori con un livesearch.php

    <?php
    // Connessione al database
    include 'db_connect2.php';
    
    if (isset($_POST['query'])) {
      $query = $_POST['query'];
    
      $sql = "SELECT nome FROM comuni WHERE nome LIKE '%$query%'";
      $result = $conn->query($sql);
    
      if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
          echo '<li style="list-style-type: none; padding: 0;cursor: pointer;" onmouseover="this.style.backgroundColor=\'#0060B0\'; this.style.color=\'#ffffff\';" onmouseout="this.style.backgroundColor=\'#ffffff\';this.style.color=\'#000000\';">' . $row['nome'] . '</li>';
        }
      } else {
        echo '<li>Nessun risultato trovato</li>';
      }
    }
    
    // Chiudi la connessione al database
    $conn->close();
    ?>

    e mi restituisce ad esempio Palermo con il quale vado a valorizzare il campo residente_a indicato prima

    poi il tutto viene dato in pasto ad un pulsante

    						<div class="text-center mt-3">
    						  <form action="" method="post">
    							......altri input
    							<input type="hidden" name="residente_a" value="<?php echo $residente_a; ?>">
    							....altri input
    
    							<button type="submit" class="btn btn-primary">Genera PDF</button>
    						  </form>
    						</div>

    Bene, nel file pdf generato nel campo denominato residente_a mi vien fuori questo errore 

    <br />
    <b>Warning</b>:  Undefined variable $residente_a in <b>C:\Users\alessandro.vitale\Desktop\provapdf\scheda_socio.php</b> on line <b>533</b><br />
    

    la linea 533 è proprio quella del bottone sopra e cioè 

    <input type="hidden" name="residente_a" value="<?php echo $residente_a; ?>">

    dove sbaglio???? 

    Io ho la sensazione che anche se nel campo html digito Pal.. e sotto mi spunta Palermo e lo seleziono, ho la sensazione che in realtà non glielo da il valore al campo.

    Oppure è errata qualche altra cosa che non vedo.

    AIUTO!!

  • Re: Compilare moduli in un file pdf da php

    13/06/2023 - alessandro.vitale ha scritto:


    e mi restituisce ad esempio Palermo con il quale vado a valorizzare il campo residente_a indicato prima

    E come viene valorizzato quel campo? Inoltre, perché hai due campi con lo stesso nome?

    13/06/2023 - alessandro.vitale ha scritto:


    poi il tutto viene dato in pasto ad un pulsante

    I pulsanti non “prendono in pasto” nulla. :)

    13/06/2023 - alessandro.vitale ha scritto:


    Io ho la sensazione che anche se nel campo html digito Pal.. e sotto mi spunta Palermo e lo seleziono, ho la sensazione che in realtà non glielo da il valore al campo.

    Aggiungi un log sulla Console JavaScript per determinare se la sensazione è corretta.

    Per il resto, mancando del codice e non avendo ben presente l'uso e lo scopo di alcuni campi che hai inserito, né il giro completo nel dettaglio, difficile fare ipotesi, salvo quella di dire che il valore non arriva nel campo che ti aspetti.

  • Re: Compilare moduli in un file pdf da php

    13/06/2023 - Alka ha scritto:


    E come viene valorizzato quel campo? Inoltre, perché hai due campi con lo stesso nome?

    Ho incollato il codice della pagina livesearch.php che ricopio quì 

    <?php
    // Connessione al database
    include 'db_connect2.php';
    
    if (isset($_POST['query'])) {
      $query = $_POST['query'];
    
      $sql = "SELECT nome FROM comuni WHERE nome LIKE '%$query%'";
      $result = $conn->query($sql);
    
      if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
          echo '<li style="list-style-type: none; padding: 0;cursor: pointer;" onmouseover="this.style.backgroundColor=\'#0060B0\'; this.style.color=\'#ffffff\';" onmouseout="this.style.backgroundColor=\'#ffffff\';this.style.color=\'#000000\';">' . $row['nome'] . '</li>';
        }
      } else {
        echo '<li>Nessun risultato trovato</li>';
      }
    }
    
    // Chiudi la connessione al database
    $conn->close();
    ?>

    e tramite lo script

    <script>
    				$(document).ready(function() {
    				  // Livesearch per il campo "Residente a"
    				  $('#residenteA').on('input', function() {
    					var query = $(this).val();
    					if (query !== '') {
    					  $.ajax({
    						url: 'livesearch.php', 
    						method: 'POST',
    						data: { query: query },
    						success: function(data) {
    						  $('#residenteAList').html(data);
    						}
    					  });
    					} else {
    					  $('#residenteAList').html('');
    					}
    				  });
    
    
    
    				  // Seleziona un valore dal livesearch per il campo "Residente a"
    				  $(document).on('click', '#residenteAList li', function() {
    					var value = $(this).text();
    					$('#residenteA').val(value);
    					$('#residenteAList').html('');
    				  });
    				});
    				</script>

    cerco e seleziono il valore dalla tendina e seleziono ad esempio Palermo (io lo vedo che nel campo c'è scritto Palermo) quell'input ha un name="residente_a" che vado a riprendermi nell'input hidden del pulsante sotto.

    Però ad esempio, nel PDF vanno correttamente i dati recuperati dalla tabella, tramite ad esempio 

    						<div class="col-sm-6">
    						  <p>Via:</p>
    						  <div class="border border-secondary rounded p-2">
    							<input type="text" name="via" value="<?php echo $row['Indirizzo(legale)']; ?>" class="border-0 w-100" style="outline: none;">
    						  </div>
    						</div>

    e inviati con metodo post e array:

    post: $via = $_POST['via'];
    fields array: 'via' => $via,

    e l'input hidden del pulsante per inviare il valore:

    <input type="hidden" name="via" value="<?php echo $row['Indirizzo(legale)']; ?>">

    Ad esempio questo campo mi viene correttamente visualizzato nel PDF mentre quelli ricavati dal livesearch come residente_a NO

  • Re: Compilare moduli in un file pdf da php

    13/06/2023 - alessandro.vitale ha scritto:


    cerco e seleziono il valore dalla tendina e seleziono ad esempio Palermo (io lo vedo che nel campo c'è scritto Palermo) quell'input ha un name="residente_a" che vado a riprendermi nell'input hidden del pulsante sotto.

    Stai valorizzando il campo che ha l'ID uguale a “residente_a”, non il name.

    Nella pagina, hai due campi con questo nome, mentre dovrebbe essercene solo uno, e l'ID è assegnato solo a uno di essi, forse quello non desiderato, e deve essere univoco.

Devi accedere o registrarti per scrivere nel forum
18 risposte