2016-09-01 20 views
6

Pobrałem jspdf, aby wygenerować plik PDF zawierający tekst z mojej tabeli html. Jedna z kolumn zawiera uwagi wprowadzone przez użytkownika, dlatego może być bardzo duża, w wyniku czego tekst działa na stronie.Jak zawijać słowo w jsPDF?

Na szorowania znalazłem this jednak

var splitTitle = doc.splitTextToSize(reportTitle, 180); 

ma więcej dostępnych w API. (Zajrzałem do pliku jspdf.js).

Jak rozwiązać ten problem?

Każdy pomysł jest doceniany.

+0

Zamiast tego należy użyć pliku jspdf 1.2.61? – Lotus91

+0

Czy możesz opublikować komunikat o błędzie, który otrzymałeś? –

+0

@ Lotus91 Na ich oficjalnej stronie, oferują one pobieranie 1.2.60, podczas gdy ** CDN ** s dają obecnie 1.2.61, ale to nie robi wielkiej różnicy dla 'splitTextToSize' –

Odpowiedz

2

Po prostu działa bez żadnych wad. Dowód:

function createPdf() { 
 
\t var doc = new jsPDF('p','in','letter') 
 
\t var loremipsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus id eros turpis. Vivamus tempor urna vitae sapien mollis molestie. Vestibulum in lectus non enim bibendum laoreet at at libero. Etiam malesuada erat sed sem blandit in varius orci porttitor. Sed at sapien urna. Fusce augue ipsum, molestie et adipiscing at, varius quis enim. Morbi sed magna est, vel vestibulum urna. Sed tempor ipsum vel mi pretium at elementum urna tempor. Nulla faucibus consectetur felis, elementum venenatis mi mollis gravida. Aliquam mi ante, accumsan eu tempus vitae, viverra quis justo.\n\nProin feugiat augue in augue rhoncus eu cursus tellus laoreet. Pellentesque eu sapien at diam porttitor venenatis nec vitae velit. Donec ultrices volutpat lectus eget vehicula. Nam eu erat mi, in pulvinar eros. Mauris viverra porta orci, et vehicula lectus sagittis id. Nullam at magna vitae nunc fringilla posuere. Duis volutpat malesuada ornare. Nulla in eros metus. Vivamus a posuere libero.' 
 

 
     // This line works. Try generating PDF. 
 
\t lines = doc.splitTextToSize(loremipsum, 7.5) 
 

 
\t doc.text(0.5, 0.5, lines) 
 
\t doc.save('Test.pdf') 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
\t <title>PDF Test</title> 
 
</head> 
 
<body> 
 
\t <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.2.60/jspdf.min.js"></script> 
 
\t <button onclick="createPdf()">Create PDF</button> 
 
</body> 
 
</html>

można zobaczyć te same wyniki w najnowszej wersji 1.2.61 zbyt. Tak więc, wyraźnie, coś innego powoduje błąd .

EDIT: Tutaj użyłem in więc o to, czy tekst jest zawijany wykracza poza 7.5in. Jeśli używasz innej jednostki, postępuj z nią prawidłowo lub może to powodować problemy:

13

Poniższy kod będzie przydatny w przypadku Twojego problemu. Będzie idealnie pasować do Twoich wymagań.

var lMargin=15; //left margin in mm 
 
    var rMargin=15; //right margin in mm 
 
    var pdfInMM=210; // width of A4 in mm 
 
    function getPDF() { 
 
\t var doc = new jsPDF("p","mm","a4"); 
 
\t var paragraph="Apple's iPhone 7 is officially upon us. After a week of pre-orders, the latest in the iPhone lineup officially launches today.\n\nEager Apple fans will be lining up out the door at Apple and carrier stores around the country to grab up the iPhone 7 and iPhone 7 Plus, while Android owners look on bemusedly.\n\nDuring the Apple Event last week, the tech giant revealed a number of big, positive changes coming to the iPhone 7. It's thinner. The camera is better. And, perhaps best of all, the iPhone 7 is finally water resistant.\n\nStill, while there may be plenty to like about the new iPhone, there's plenty more that's left us disappointed. Enough, at least, to make smartphone shoppers consider waiting until 2017, when Apple is reportedly going to let loose on all cylinders with an all-glass chassis design."; 
 
\t \t 
 
     var lines =doc.splitTextToSize(paragraph, (pdfInMM-lMargin-rMargin)); 
 
\t doc.text(lMargin,20,lines); 
 
\t doc.save('Generated.pdf'); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script> 
 
<button id="getPDF" onclick="getPDF()">Get PDF</button>

Dla splitTextToSize:

Jak mówili doc.splitTextToSize(text,size) nie jest obecny w jspdf 1.2.60 API.

Powód: To doc.splitTextToSize(text,size) występuje w jspdf 1.2.60 lib ale nie w jspdf.js. Jest on obecny w jspdf.debug.js iw jego minowanej wersji jspdf.min.js. To dlatego nie znajdujesz splitTextToSize w swoim jspdf.js. Patrzyłeś na to w złym pliku. Możesz zamienić swój jspdf.js na jspdf.debug.js, a twój kod będzie działał idealnie.

Pliki jspdf.debug.js i jspdf.min.js są dostępne w pliku zip api w lokalizacji \jsPDF-master\dist.

Uwaga: Podałem Ci kod do dzielenia twojego długiego akapitu na wiele linii. Tutaj podzieliłem linię po 180 mm (210 mm-15 mm-15 mm), jeśli tekst przekroczy 180 mm, tekst pojawi się w znaku nowej linii. Możesz zmienić parametry w zależności od swojego zastosowania.

Poniżej zrzut ekranu w celach informacyjnych, który zawiera definicję funkcji splitTextToSize w jspdf.debug.js.

enter image description here Daj mi znać, jeśli potrzebujesz pomocy. Szczęśliwe kodowanie ...!

+0

Zmieniłem 'var rMargin = 150; // prawy margines w mm' od 15, teraz szerokość kolumny jest mała, tekst powinien iść do strony 2, ale jej nie ma, co za dużo tekstu może się pojawić, a reszta jest zagubiona, chcę, żeby była kontynuowana następna strona, możesz pomóc? – user2828442

+0

@ użytkownik2828442 Czy możesz udostępnić jeden przykład. Nie otrzymujesz dokładnie tego, co mówisz, czego dokładnie chcesz (Utwórz nowe pytanie, jeśli chcesz) – Abhijeet

Powiązane problemy