jsPDF có thể sử dụng plugin. Để cho phép nó in HTML, bạn phải bao gồm một số bổ trợ nhất định và do đó phải thực hiện các thao tác sau:
- Truy cập https://github.com/MrRio/jsPDF và tải xuống Phiên bản mới nhất.
- Bao gồm các tập lệnh sau trong dự án của bạn:
- jspdf.js
- jspdf.plugin.from_html.js
- jspdf.plugin.split bản_to_size.js
- jspdf.plugin.st Chuẩn_fonts_metrics.js
Nếu bạn muốn bỏ qua các thành phần nhất định, bạn phải đánh dấu chúng bằng ID, sau đó bạn có thể bỏ qua trong trình xử lý phần tử đặc biệt của jsPDF. Do đó, HTML của bạn sẽ trông như thế này:
<!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>
Sau đó, bạn sử dụng mã JavaScript sau để mở tệp PDF đã tạo trong 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");
Đối với tôi, điều này đã tạo ra một bản PDF đẹp và gọn gàng chỉ bao gồm dòng 'in cái này thành pdf'.
Xin lưu ý rằng các trình xử lý phần tử đặc biệt chỉ xử lý ID trong phiên bản hiện tại, điều này cũng được nêu trong Vấn đề GitHub . Nó nói:
Bởi vì việc khớp được thực hiện đối với mọi phần tử trong cây nút, mong muốn của tôi là làm cho nó nhanh nhất có thể. Trong trường hợp đó, điều đó có nghĩa là "Chỉ các ID phần tử được khớp" Các ID phần tử vẫn được thực hiện theo kiểu jQuery "#id", nhưng điều đó không có nghĩa là tất cả các bộ chọn jQuery đều được hỗ trợ.
Do đó, việc thay thế '#ignorePDF' bằng các bộ chọn lớp như '.ignorePDF' không hiệu quả với tôi. Thay vào đó, bạn sẽ phải thêm cùng một trình xử lý cho từng phần tử mà bạn muốn bỏ qua như:
var elementHandler = {
'#ignoreElement': function (element, renderer) {
return true;
},
'#anotherIdToBeIgnored': function (element, renderer) {
return true;
}
};
Từ các ví dụ cũng có thể nói rằng có thể chọn các thẻ như 'a' hoặc 'li'. Đó có thể là một chút không hạn chế đối với hầu hết các giai đoạn:
Chúng tôi hỗ trợ xử lý yếu tố đặc biệt. Đăng ký chúng với bộ chọn ID kiểu jQuery cho ID hoặc tên nút. ("#iAmID", "div", "span", v.v.) Không có hỗ trợ cho bất kỳ loại bộ chọn (lớp, hợp chất) nào khác tại thời điểm này.
Một điều rất quan trọng để thêm là bạn mất tất cả thông tin về phong cách (CSS). May mắn thay jsPDF có thể định dạng độc đáo h1, h2, h3, v.v., đủ cho mục đích của tôi. Ngoài ra, nó sẽ chỉ in văn bản trong các nút văn bản, điều đó có nghĩa là nó sẽ không in các giá trị của textareas và tương tự. Thí dụ:
<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>