jsPDF eklentileri kullanabilir. HTML'yi yazdırmasını sağlamak için belirli eklentileri eklemeniz gerekir ve bu nedenle aşağıdakileri yapmanız gerekir:
- Https://github.com/MrRio/jsPDF adresine gidin ve en son Sürümü indirin.
- Projenize aşağıdaki Komut Dosyalarını ekleyin:
- jspdf.js
- jspdf.plugin.from_html.js
- jspdf.plugin.split_text_to_size.js
- jspdf.plugin.standard_fonts_metrics.js
Belirli öğeleri yoksaymak istiyorsanız, bunları bir kimlikle işaretlemeniz gerekir; bu öğe daha sonra jsPDF'nin özel bir öğe işleyicisinde yok sayabilirsiniz. Bu nedenle HTML'niz şöyle görünmelidir:
<!DOCTYPE html>
<html>
<body>
<p id="ignorePDF">don't print this to pdf</p>
<div>
<p><font size="3" color="red">print this to pdf</font></p>
</div>
</body>
</html>
Ardından, oluşturulan PDF'yi bir PopUp'ta açmak için aşağıdaki JavaScript kodunu kullanırsınız:
var doc = new jsPDF();
var elementHandler = {
'#ignorePDF': function (element, renderer) {
return true;
}
};
var source = window.document.getElementsByTagName("body")[0];
doc.fromHTML(
source,
15,
15,
{
'width': 180,'elementHandlers': elementHandler
});
doc.output("dataurlnewwindow");
Benim için bu, 'bunu pdf'ye yazdır' satırını içeren güzel ve düzenli bir PDF oluşturdu.
Özel öğe işleyicilerin yalnızca geçerli sürümdeki, GitHub Sayısında da belirtilen kimliklerle ilgilendiğini lütfen unutmayın . Belirtir:
Eşleştirme, düğüm ağacındaki her öğeye karşı yapıldığı için arzum mümkün olduğunca hızlı hale getirmekti. Bu durumda, "Yalnızca öğe kimlikleri eşleştirilir" anlamına gelir Öğe kimlikleri hala "#id" jQuery stilinde yapılır, ancak bu tüm jQuery seçicilerinin desteklendiği anlamına gelmez.
Bu nedenle '#ignorePDF' yerine '.ignorePDF' gibi sınıf seçicileri koymak benim için işe yaramadı. Bunun yerine, göz ardı etmek istediğiniz her öğe için aynı işleyiciyi eklemeniz gerekir:
var elementHandler = {
'#ignoreElement': function (element, renderer) {
return true;
},
'#anotherIdToBeIgnored': function (element, renderer) {
return true;
}
};
Gönderen örnekler aynı zamanda bir 'veya 'li' gibi etiketler seçmek mümkün olduğu belirtilmektedir. Yine de çoğu kullanım için biraz kısıtlayıcı olabilir:
Özel eleman işleyicileri destekliyoruz. Kimlik veya düğüm adı için bunları jQuery tarzı kimlik seçiciyle kaydedin. ("#iAmID", "div", "span" vb.) Şu anda başka herhangi bir seçici (sınıf, bileşik) türü için destek bulunmamaktadır.
Eklenecek çok önemli bir şey, tüm stil bilgilerinizi (CSS) kaybetmenizdir. Neyse ki jsPDF, benim amacım için yeterli olan h1, h2, h3 vb. Ayrıca, yalnızca metin düğümleri içindeki metinleri yazdırır, bu da metin ve benzeri değerlerini yazdırmayacağı anlamına gelir. Misal:
<body>
<ul>
<!-- This is printed as the element contains a textnode -->
<li>Print me!</li>
</ul>
<div>
<!-- This is not printed because jsPDF doesn't deal with the value attribute -->
<input type="textarea" value="Please print me, too!">
</div>
</body>