jsPDF สามารถใช้ปลั๊กอินได้ ในการเปิดใช้งานเพื่อพิมพ์ HTML คุณต้องรวมปลั๊กอินบางตัวและดังนั้นจึงต้องทำสิ่งต่อไปนี้:
- ไปที่https://github.com/MrRio/jsPDFและดาวน์โหลดเวอร์ชันล่าสุด
- รวมสคริปต์ต่อไปนี้ในโครงการของคุณ:
- jspdf.js
- jspdf.plugin.from_html.js
- jspdf.plugin.split_text_to_size.js
- jspdf.plugin.standard_fonts_metrics.js
หากคุณต้องการละเว้นองค์ประกอบบางอย่างคุณต้องทำเครื่องหมายด้วย ID ซึ่งคุณสามารถละเว้นในตัวจัดการองค์ประกอบพิเศษของ jsPDF ดังนั้น HTML ของคุณควรมีลักษณะดังนี้:
<!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>
จากนั้นคุณใช้รหัส JavaScript ต่อไปนี้เพื่อเปิด PDF ที่สร้างขึ้นใน PopUp:
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");
สำหรับฉันสิ่งนี้สร้าง PDF ที่สวยงามและเป็นระเบียบเรียบร้อยซึ่งรวมเฉพาะบรรทัด 'พิมพ์เป็น pdf' เท่านั้น
โปรดทราบว่าตัวจัดการองค์ประกอบพิเศษจัดการเฉพาะกับ ID ในเวอร์ชันปัจจุบันซึ่งระบุไว้ในฉบับ GitHubด้วย มันระบุว่า:
เนื่องจากการจับคู่ถูกทำกับทุก ๆ องค์ประกอบในทรีโหนดความต้องการของฉันคือทำให้มันเร็วที่สุด ในกรณีนั้นมันหมายถึง "เฉพาะองค์ประกอบของรหัสที่ตรงกัน" รหัสองค์ประกอบยังคงทำในรูปแบบ jQuery "#id" แต่ไม่ได้หมายความว่ารองรับ jQuery selectors ทั้งหมด
ดังนั้นการแทนที่ '#ignorePDF' ด้วยตัวเลือกคลาสเช่น '.ignorePDF' ไม่ทำงานสำหรับฉัน แต่คุณจะต้องเพิ่มตัวจัดการที่เหมือนกันสำหรับแต่ละองค์ประกอบซึ่งคุณต้องการละเว้นเช่น:
var elementHandler = {
'#ignoreElement': function (element, renderer) {
return true;
},
'#anotherIdToBeIgnored': function (element, renderer) {
return true;
}
};
จากตัวอย่างมีการระบุด้วยว่าคุณสามารถเลือกแท็กเช่น 'a' หรือ 'li' นั่นอาจเป็นข้อ จำกัด เล็กน้อยสำหรับการใช้งานส่วนใหญ่ แต่:
เรารองรับเครื่องมือจัดการองค์ประกอบพิเศษ ลงทะเบียนพวกเขาด้วยตัวเลือก ID สไตล์ jQuery สำหรับ ID หรือชื่อโหนด ("#iAmID", "div", "span" ฯลฯ ) ไม่มีการสนับสนุนตัวเลือกประเภทอื่น ๆ (คลาสของสารประกอบ) ในขณะนี้
สิ่งหนึ่งที่สำคัญมากในการเพิ่มคือการที่คุณสูญเสียข้อมูลสไตล์ทั้งหมดของคุณ (CSS) โชคดีที่ jsPDF สามารถฟอร์แมต h1, h2, h3 และอื่น ๆ ซึ่งเพียงพอสำหรับวัตถุประสงค์ของฉัน นอกจากนี้มันจะพิมพ์ข้อความภายในโหนดข้อความเท่านั้นซึ่งหมายความว่ามันจะไม่พิมพ์ค่าของ textareas และสิ่งที่คล้ายกัน ตัวอย่าง:
<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>