Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Aprire un PDF creato al volo via ajax

    Ciao, oggi ho questo problema
    Per visualizzare un report, creo al volo un PDF con la libreria TCPDF, ma non potendo reindirizzare la pagina chiamante, ho provato ad utilizzare ajax per gestire la chiamata.
    Devo dire che funziona, il problema è che... no i problemi sono molti
    La prima cosa che ho notato è che mi torna indietro il pdf completo come stringa; interessante, peccato che non so come trattarlo.
    Il motivo di tale comportamento probabilmente risale a come gestisco la creazione del file che è: $pdf->outPut('nome.pdf', 'I'); ma anche utilizzando le altre modalità non mi salva il file, anzi con la modalità F mi va in errore perché non ho i permessi per scrivere il file direttamente sul server.
    Al momento quindi non ho idea di come fare a procedere.
    Un po' di codice?
    La parte chiamante:
    codice:
    submitHandler: function(form) {
    					
    $(document).ajaxStart(function(){
    	$('.girandola').show();
    });
    $(document).ajaxComplete(function(){
    	$('.girandola').hide(300);
    });
    $( document ).ajaxError(function(event, request, settings) {
    	winError('Si è verificato un errore grave tentando di stampare il PDF.');
    });
    
    $('#dialog').load(
    	'DB/DB_stampa.php',
    	{
    		stampaNome: $('#stampa-nome').val(),
    		stampaQualifica: $('#stampa-qualifica').val(),
    		stampaTimbro: $('#stampa-timbro').val(),
    		stampaData: $('#stampa-data').val(),
    		stampaMagistrato: $('#stampa-magistrato').val(),
    		stampaMinimo: $('#stampa-max').val(),
    		stampaMassimo: $('#stampa-max').val(),
    		stampaTipo: $('input[name^="stampaTipo"]:checked').val()
    	},
    	function(data) {
    		$('#dialog').text(data);
    		$('#dialog').show();
    	}
    );
    }
    #dialog è solo un <div> creato per vedere cosa riporta data, ed effettivamente è il PDF.
    La chiamata, come si dovrebbe capire è dentro il plugin jquery.validate().
    Per il PHP ... è molto più complesso, però se chiamo il file direttamente sull'url del browser, cioè senza passare via ajax il pdf mi viene mostrato, quindi...
    Quindi penso che il problema sia nella chiamata, ma non so cosa fare; peggio poi è che tutto il sistema deve essere crossbrowser, partendo almeno da IE8, per Chrome e FF non mi preoccupo troppo, li sto utilizzando per lo sviluppo, quindi...

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,506
    ciao puoi provare a vedere questa libreria

    http://mozilla.github.com/pdf.js/
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da ciro78 Visualizza il messaggio
    ciao puoi provare a vedere questa libreria

    http://mozilla.github.com/pdf.js/
    La stavo giusto guardando or ora, comunque grazie; devo ancora capire come usarla.

  4. #4
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Risolto! Non la posso usare
    Non è supportata da IE8.
    Fa uso delle promises che vengono supportate solo da Edge per quanto riguarda IE.

  5. #5
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Allora, c'è un finale a tutta questa storia.
    1) C'è sempre da studiare quindi imparare, anche se con fatica.
    2) Ho fatto questo: Usato il comando S per l'output in PHP della TCPDF, questo comando restituisce il PDF in una stringa invece che in un file, quindi ho codificata la stringa così ottenuta in base64 e l'ho inviata indietro.
    Codice PHP:
    ....
    echo ( 
    base64_encode$pdf->outPut('''S')) );
    .... 
    Poi l'ho ripresa nel javascript del file chiamante:
    codice:
    ... jQUERY AJAX ...
    function(data) {window.open('data:application/pdf;base64,' + data, '', 'height=650,width=840');
    }
    Questo apre una finestra che doveva contenere il PDF, ma non è così. Apre la finestra ma non appare nulla, quindi ho lasciato stare questo approccio.
    Ve l'ho detto solo per completezza e per vedere se a qualcuno viene qualche idea in merito.
    In realtà l'escamotage che ho trovato per ora e questo: salvo il tutto in un file .pdf che poi apro col metodo della finestrella, come sopra appunto, ma scaricando il file in essa.
    Funziona anche se non mi fa impazzire.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.