web-dev-qa-db-fra.com

Retour à la ligne généré PDF (en utilisant jsPDF)?

ce que je fais est d'utiliser jsPDF pour créer un PDF du graphe que j'ai généré. Cependant, je ne suis pas sûr de savoir comment envelopper le titre (ajouté en utilisant la fonction text ()). La longueur du titre varie d'un graphique à l'autre. Actuellement, mes titres sortent de la page. Toute aide serait appréciée!

C'est le code que j'ai jusqu'à présent:

var doc = new jsPDF();
doc.setFontSize(18);
doc.text(15, 15, reportTitle);
doc.addImage(outputURL, 'JPEG', 15, 40, 180, 100);
doc.save(reportTitle);

Rien pour empêcher le reportTitle de sortir de la page

24
user3749946

Ok, j'ai résolu ça. J'ai utilisé la fonction jsPDF, splitTextToSize (text, maxlen, options). Cette fonction retourne un tableau de chaînes. Heureusement, la fonction jsPDF text (), utilisée pour écrire dans le document, accepte les chaînes et les tableaux de chaînes.

var splitTitle = doc.splitTextToSize(reportTitle, 180);
doc.text(15, 20, splitTitle);
62
user3749946

Un problème de pagination automatique et de retour à la ligne dans JSPDF peut être obtenu avec le code suivant 

 var splitTitle = doc.splitTextToSize($('#textarea').val(), 270);
    var pageHeight = doc.internal.pageSize.height;
    doc.setFontType("normal");
    doc.setFontSize("11");
    var y = 7;
    for (var i = 0; i < splitTitle.length; i++) {                
        if (y > 280) {
            y = 10;
            doc.addPage();
        }
        doc.text(15, y, splitTitle[i]);
        y = y + 7;
    }
    doc.save('my.pdf');
4
KB1788

Si vous devez ajouter de manière dynamique de nouvelles lignes, vous souhaitez accéder au tableau renvoyé par doc.splitTextToSize, puis ajouter de l'espace vertical à chaque passage:

var y = 0, lengthOfPage = 500, text = [a bunch of text elements];

//looping thru each text item
for(var i = 0, textlength = text.length ; i < textlength ; i++) {

    var splitTitle = doc.splitTextToSize(text[i], lengthOfPage);

    //loop thru each line and output while increasing the vertical space
    for(var c = 0, stlength = splitTitle.length ; c < stlength ; c++){

        doc.text(y, 20, splitTitle[c]);
        y = y + 10;

    }

}
0