[SOLVED] salvare il TCPDF output in mysql e rivisualizzarlo

perseoclub

Utente Attivo
28 Nov 2015
91
0
6
Come da oggetto sto tentando di memorizzare un pdf realizzato dinamicamente con la libreria php TCPDF in un database MySQL.

Il campo del database è BLOB.. e gli invio l'output ottenuto in formato stringa con la libreria TCPDF:
PHP:
$pdf->Output('', 'S');

Quando visualizzo il campo da phpmyadmin trovo il file nella colonna BLOB, e se ci clicco sopra mi chiede di scaricarlo (è in formato .bin). Scaricato e rinominato in .pdf → compare il mio PDF leggibile!

Il problema nasce quando tento di visualizzarlo dal browser (dalla mia web application), interrogando il database (uso PDO).

E' una chiamata AJAX ("se clicchi il pulsante 'btn_pdf' visualizza il pdf"):

Codice:
$.ajax({
        url: 'select_pdf_dal_db.php',
        type: 'post',
        data: {myjson: myjson},
        dataType: 'html',
        success: function(html) {
            // html → restituisce col comando echo la stringa memorizzata nel db
            window.open( "data:application/pdf," + escape( html ) , '', 'height=650,width=840');
        }
    });

Mi apre la finestra.. nella barra riporta tutto il contenuto del file:
"data:application/pdf,%25PDF-1.7%0A%25%uFFFD%uFFFD%uFFFD%uFFFD%0A7 0 obj%0A%...ecc..ecc.."
(mi pare in formato binario) e la pagina è vuota!

Dove sbaglio?

[EDIT: passando con il mouse sulla finestra (bianca, vuota) che visualizza il pdf (richiamato da MySQL) mi sono accorto che il puntatore riconosce l'area del logo della mia azienda (anche se è tutto bianco).. e se ci clicco si sopra apre il link → ergo il pdf viene visualizzato tutto bianco, ma qualcosa gli arriva!!! A questo punto ipotizzo sia un problema di visualizzazione.
Sono accette tutte le possibili soluzioni: in sostanza, a me serve memorizzare nel DB il pdf realizzato dinamicamente, e poterlo richiamare per visualizzarlo quando occorre..]
 
Ultima modifica:
Dopo aver sboccato sangue andando a tentativi.. ho capito che dovevo:

1) da PHP dovevo codificare la stringa ($content) in base64:
PHP:
$content = $pdf->Output('', 'S');
echo ( base64_encode( $content ) );

2) da JS dovevo decodificare il base64:
Codice:
window.open( 'data:application/pdf;base64,'+ html, '', 'height=650,width=840');
 
contento per la soluzione del problema,
meno contento per la scelta di memorizzare i pdf nel db
il file system è il miglior database per i file !!
dopo un po' di pdf memorizzati, il db assumerà dimensioni impossibili per un serio backup
meglio usare come detto il file system e robocopy per i backup dei pdf
se fosse necessario, i file pdf possono essere conservati criptati
 
Ottimo consiglio Marino,

ho controllato le dimensioni del pdf.. e sono circa 53kb per file creato.. Quindi considerandone 10.000/anno parliamo di circa 1 Gb all'anno.. Ho pensato infatti alla soluzione file-system (+backup).

Mi adopero per capire come salvare i file sul filesystem e per poterli richiamare successivamente..
Poi do un'occhiata anche a robocopy..

Nel frattempo mi puoi dare indicazione su come criptarli? Cioè.. se io li esporto in base64.. potrei criptare quella stringa e salvarla sul file-system e poi richiamarla (decriptandola)? Se fosse questa la procedura, cosa mi occorre?

Oppure esistono plugin che fanno tutto. Ti ricordo che l'applicazione girerà su Linux e (forse) su Win.

Grazie! :)
 

Discussioni simili