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
Якщо ви хочете ігнорувати певні елементи, вам потрібно позначити їх ідентифікатором, який ви можете потім проігнорувати у спеціальному обробнику елементів 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".
Зверніть увагу, що обробники спеціальних елементів мають справу лише з ідентифікаторами в поточній версії, що також зазначено у випуску GitHub . У ньому зазначено:
Оскільки відповідність проводиться проти кожного елемента дерева дерева, моє бажання було зробити це якомога швидше. У цьому випадку це означало "Збігаються лише ідентифікатори елементів" Ідентифікатори елементів все ще робляться в стилі jQuery "#id", але це не означає, що всі селектори jQuery підтримуються.
Тому заміна "#ignorePDF" на селектори, такі як ".ignorePDF", для мене не працювала. Натомість вам доведеться додати один і той же обробник для кожного елемента, який ви хочете ігнорувати:
var elementHandler = {
'#ignoreElement': function (element, renderer) {
return true;
},
'#anotherIdToBeIgnored': function (element, renderer) {
return true;
}
};
З прикладів також зазначено, що можна вибрати теги типу "a" або "li". Для більшості випадків використання це може бути небагато обмежувальним:
Ми підтримуємо спеціальні обробники елементів. Зареєструйте їх за допомогою селектора ідентифікаторів у стилі jQuery для ідентифікатора чи імені вузла. ("#iAmID", "div", "span" тощо) Наразі немає жодної підтримки селекторів (класу, сполуки).
Одне дуже важливе, що потрібно додати, - це те, що ви втрачаєте всю інформацію про стиль (CSS). На щастя, jsPDF здатний добре відформатувати h1, h2, h3 тощо, що було досить для моїх цілей. Крім того, він буде друкувати текст лише в текстових вузлах, а це означає, що він не буде друкувати значення текстових областей тощо. Приклад:
<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>