36 messaggi dal 14 dicembre 2005
Nella mia form ho inserito un grafico fatto con la jquery di Highcharts. Per la stampa dello stesso ho utilizzato html2canvas unito a canvg, inserendo il seguente codice
$(document).ready(function () {
                $("#button").click(function () {
                    var svgElements = $("#container").find('svg');
                    var canvas

                    svgElements.each(function () {
                        var xml;

                        canvas = document.createElement("canvas");
                        canvas.className = "screenShotTempCanvas";
                        //convert SVG into a XML string
                        xml = (new XMLSerializer()).serializeToString(this);

                        // Removing the name space as IE throws an error
                        xml = xml.replace(/xmlns=\"http:\/\/www\.w3\.org\/2000\/svg\"/, '');

                        //draw the SVG onto a canvas
                        canvg(canvas, xml);
                        $(canvas).insertAfter(this);
                        //hide the SVG element
                        this.className = "tempHide";
                        $(this).hide();
                    });

                    html2canvas(document.getElementById("container"), {
                        onrendered: function (canvas) {
                            var imgData = canvas.toDataURL('image/png');
                            var doc = new jsPDF('l', 'mm');
                            doc.addImage(imgData, 'PNG', 5, 5, 280);
                            doc.save('sample-file.pdf');
                        }
                    });
                });
            });


Il problema e' che non mi elabora la stampa, anzi a volte dovrei cliccare il tasto molte volte per poter avere il pdf.

Chiedo: c'e' qualche errore o qualcosa mancante o altro, per poter avere ad ogni click la stampa?
36 messaggi dal 14 dicembre 2005
Allora:
- l' html2canvas viene chiamato il modo asincrono, quindi ha bisogno di un po' di tempo affinche' ci sia una risposta (quindi la chiamata onrendered) alla sua chiamata;
- quindi, quando chiamo l'evento al click del pulsante esso viene "terminato" prima del tempo di risposta all'evento dell'onrendered dell'html2canvas, e quindi non ho la risposta;
- ho inserito una pausa di 10 secondi al javascript verso la fine della procedura click ed ho sempre l'evento dell'html2canvas.

Ho fatto una ricerca ed ho travato questo metodo:
- ho inserito questo pulsante:

<asp:Button ID="myButtonID" runat="server" onClientClick="return CallMyJavaScriptFunction();" UseSubmitBehavior="false"
                        Text="PDF" Style="position:absolute; " />

ed ho inserito la funzione, e tutto funziona bene!

Ora non so perche'...

Ancora grazie.
dave
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
penso che il problema fosse più o meno questo: dato che un asp:Button causa il postback della pagina, il browser non attenderà che eventuali operazioni asincrone che hai lanciato dalla funzione CallMyJavaScriptFunction() si concludano.

Ho visto che in qualche modo hai già risolto. Probabilmente sei riuscito ad inibire il postback in qualche modo (es. facendo restituire false a CallMyJavaScriptFunction()).

L'alternativa era cambiare l'asp:Button in un semplice:
<input type="button" onclick="CallMyJavaScriptFunction()" value="PDF" />

Infatti, dato che il bottone serve ad invocare giusto una funzione client, non c'è motivo per cui debba essere un componente server come un asp:Button.

Un <input type="button" non causa affatto un postback, e quindi il problema è risolto perché non c'è la necessità di inibirlo.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.