Так як у JavaScript немає повноцінної технології для створення документу Microsoft Word (ActiveX у Internet Explorer не враховуємо) будемо використовувати Data URL.
Для MS Word Data URL має такий формат: "data:application/msword,дані", прицьому дані рекомендовано закодувати за допомогою encodeURIComponent().
Data URL можна присвоїти властивості location.href або відкрити у новому вікні за допомогою window.open()
- Недоліки Data URL:
- обмеження у розмірі URL
- підтримує Internet Explorer від 8 версії
- закодовані дані за допомогою encodeURIComponent() (btoa) збільшуються за об'ємом
Найпростішим способом є передача простого тексту.
function toWord(text){
location.href='data:application/msword,'+encodeURIComponent(text);
}
toWord('Word файл на JavaScript');
Більш оптимальним способом є запис у файл Word даних HTML, а вже MS Word перетворить у свій формат. Також можна використовувати CSS стилі. Простіше кажучи ми записуємо веб-сторінку у файл з деякими параметрами для MS Word, а вже Word перетворює у свій формат.
function HTMLtoWord(html){
var xml='<html xmlns:w="urn:schemas-microsoft-com:office:word">';
xml+='<head><meta charset="utf-8"></head><body>'; //вказуємо кодіровку utf-8
xml+=html;
xml+='</body></html>';
location.href='data:application/msword,'+encodeURIComponent(xml);
}
HTMLtoWord('<p>HTML у Word за допомогою <b>JavaScript</b></p><p style="color:blue;font-size:24px">MS Word</p>');
//HTMLtoWord(document.getElementsByTagName('body')[0].innerHTML);
Також можна використовувати 64 бітне кодування даних за допомогою btoa(), прицьому це слід вказати у параметрі "data:application/msword;base64,дані"
function HTMLtoWord(html){
var xml='<html xmlns:w="urn:schemas-microsoft-com:office:word">';
xml+='<head><meta charset="utf-8"></head><body>'; //вказуємо кодіровку utf-8
xml+=html;
xml+='</body></html>';
location.href='data:application/msword;base64,'+btoa(unescape(encodeURIComponent(xml)));
}
HTMLtoWord('<p>HTML у Word з 64 бітним кодуванням за допомогою <b>JavaScript</b></p><p style="color:blue;font-size:24px">MS Word</p>');