2017-02-15 3 views
1

Ich versuche, meine Seite in PDF zu konvertieren.

Ich habe zwei Seiten, die in base64-kodierte Bilder konvertiert werden, dann mit jsPDF in ein PDF hinzugefügt. Es funktioniert gut.

Mein Problem ist, ich möchte den Code unten warten auf die Domtoimage-Funktion behandelt werden, bevor Sie es speichern.

var doc = new jsPDF(); 
 

 
//First 
 
domtoimage.toPng(document.getElementById('page')) 
 
.then(function (dataUrl) { 
 
      doc.addImage(dataUrl, 'png', 15, 10, 180, 280); 
 
      doc.addPage(); 
 
}); 
 
//Second 
 
domtoimage.toPng(document.getElementById('page2')) 
 
.then(function (dataUrl) { 
 
      doc.addImage(dataUrl, 'png', 15, 10, 180, 280); }); 
 
//Third 
 
doc.save("file.pdf");

fand ich diese Lösung: https://api.jquery.com/jquery.when/ aber wie ich mit Versprechen nicht vertraut bin, weiß ich nicht, wie es funktioniert.

Vielen Dank für Ihre Hilfe.

+0

Vielleicht '.delay (ms)' kann helfen. Andernfalls können Sie die Funktion 'setTimeout()' verwenden. Lesen Sie mehr über Verzögerung hier: https://api.jquery.com/delay/ – Jer

+0

'.delay' gilt nur für die Effekte-Warteschlange (zB fadeIn/slideDown). Es ist nicht für den allgemeinen "Warte eine bestimmte Zeit". –

Antwort

1

Nur versuchen.

var doc = new jsPDF(); 

//First 
domtoimage.toPng(document.getElementById('page')) 
.then(function (dataUrl) { 
    doc.addImage(dataUrl, 'png', 15, 10, 180, 280); 
    doc.addPage(); 
    domtoimage.toPng(document.getElementById('page2')).then(function (dataUrl) { 
     doc.addImage(dataUrl, 'png', 15, 10, 180, 280); 
     doc.save("file.pdf"); 
    }); 
}); 
+0

Nicht die Art von Antwort, die ich erwartet habe, aber es funktioniert. Danke :) – Knriano

1

Sie können dies versuchen:

var doc = new jsPDF(); 

//First 
domtoimage.toPng(document.getElementById('page')) 
.then(function (dataUrl) { 
      doc.addImage(dataUrl, 'png', 15, 10, 180, 280); 
      doc.addPage(); 

      //Second 
      domtoimage.toPng(document.getElementById('page2')) 
       .then(function (dataUrl) { 
        doc.addImage(dataUrl, 'png', 15, 10, 180, 280); 

        //Third 
        doc.save("file.pdf");  
       }); 

}); 
1

Sie .when $() verwenden für diese ..

function func1(){ 
    domtoimage.toPng(document.getElementById('page')) 
    .then(function (dataUrl) { 
     doc.addImage(dataUrl, 'png', 15, 10, 180, 280); 
     doc.addPage(); 
    }); 
} 

function func2(){ 
    domtoimage.toPng(document.getElementById('page2')) 
    .then(function (dataUrl) { 
     doc.addImage(dataUrl, 'png', 15, 10, 180, 280); }); 
} 

$.when(func1(), func2()) 
.done(function(){ 
    doc.save("file.pdf"); 
    }).fail(function(){ 
     console.log('failure'); 
}); 
+0

Es funktioniert nicht. Es gibt mir ein leeres PDF, was bedeutet, dass es vor der Ausführung der beiden Funktionen speichert:/ – Knriano

+0

hast du doc ​​initialisiert? – Subho

+0

Ja, habe ich. Ich denke, die domtoimage-Funktion wird im Hintergrund behandelt, da es ein paar Sekunden dauert, um das Bild zu erzeugen. So speichert es zuerst und geht zurück zu dmtoimage, um treatement zu beenden – Knriano

1

etwas Versuchen Sie, wie unten:

var doc = new jsPDF(); 
 

 
$.when(fn1()).done(function (v1) { 
 
    console.log(v1); 
 
}); 
 

 
//First 
 
function fn1() { 
 
    domtoimage.toPng(document.getElementById('page')) 
 
    .then(function (dataUrl) { 
 
     doc.addImage(dataUrl, 'png', 15, 10, 180, 280); 
 
     doc.addPage(); 
 

 
     // Call next function. 
 
     $.when(fn2()).done(function(v2) { 
 
     console.log(v2); 
 
     }); 
 
    }); 
 

 
    return 'success'; 
 
} 
 

 
//Second 
 
function fn2() { 
 
    domtoimage.toPng(document.getElementById('page2')) 
 
    .then(function (dataUrl) { 
 
     doc.addImage(dataUrl, 'png', 15, 10, 180, 280); 
 

 
     // Call next function. 
 
     $.when(fn3()).done(function(v3) { 
 
     console.log(v3); 
 
     }); 
 
    }); 
 

 
    return 'success'; 
 
} 
 

 
//Third 
 
function fn3() { 
 
    doc.save("file.pdf"); 
 

 
    return 'success'; 
 
}

+0

Es funktioniert nicht. Die Funktionen heißen in der richtigen Reihenfolge fn1, dann fn2 und dann fn3, aber ich denke, dass die Funktion dmodoimage noch im Hintergrund verarbeitet wird. Ergebnis speichert zuerst die PDF und dann das dmtoimage – Knriano

+0

Ok, danke für die Aktualisierung. – Yogesh

+0

@Knriano, ich habe den Code aktualisiert und auch in anderen Funktionen viel versprochen. Wird es möglich sein, es zu versuchen und uns zu aktualisieren, wenn das funktioniert? – Yogesh

Verwandte Themen