Skip to content

Instantly share code, notes, and snippets.

@dcondrey
Created August 5, 2017 22:29
Show Gist options
  • Save dcondrey/c24afe30a1adb685eb184b6b1a2fe5d9 to your computer and use it in GitHub Desktop.
Save dcondrey/c24afe30a1adb685eb184b6b1a2fe5d9 to your computer and use it in GitHub Desktop.

Revisions

  1. dcondrey created this gist Aug 5, 2017.
    79 changes: 79 additions & 0 deletions savetoDoc.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,79 @@
    /* HTML to Microsoft Word Export
    * This code demonstrates how to export an html element to Microsoft Word
    * with CSS styles to set page orientation and paper size.
    * Tested with Word 2010, 2013 and FireFox, Chrome, Opera, IE10-11
    * Fails in legacy browsers (IE<10) that lack window.Blob object
    */
    function saveDoc() {

    if (!window.Blob) {
    alert('Your legacy browser does not support this action.');
    return;
    }

    var html, link, blob, url, css;

    // EU A4 use: size: 841.95pt 595.35pt;
    // US Letter use: size:11.0in 8.5in;

    css = ('\
    <style>\
    @page WordSection1{size: 841.95pt 595.35pt;mso-page-orientation: portrait;}\
    div.WordSection1 {page: WordSection1;}\
    h1 {font-family: "Times New Roman", Georgia, Serif; font-size: 16pt;}\
    p {font-family: "Times New Roman", Georgia, Serif; font-size: 14pt;}\
    </style>\
    ');

    var rightAligned = document.getElementsByClassName("sm-align-right");
    for (var i=0, max=rightAligned.length; i < max; i++) {
    rightAligned[i].style = "text-align: right;"
    }

    var centerAligned = document.getElementsByClassName("sm-align-center");
    for (var i=0, max=centerAligned.length; i < max; i++) {
    centerAligned[i].style = "text-align: center;"
    }

    html = document.getElementById('text').innerHTML;
    html = '\
    <html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">\
    <head>\
    <title>Document Title</title>\
    <xml>\
    <w:worddocument xmlns:w="#unknown">\
    <w:view>Print</w:view>\
    <w:zoom>90</w:zoom>\
    <w:donotoptimizeforbrowser />\
    </w:worddocument>\
    </xml>\
    </head>\
    <body lang=RU-ru style="tab-interval:.5in">\
    <div class="Section1">' + html + '</div>\
    </body>\
    </html>'

    blob = new Blob(['\ufeff', css + html], {
    type: 'application/msword'
    });

    url = URL.createObjectURL(blob);
    link = document.createElement('A');
    link.href = url;

    filename = 'filename';

    // Set default file name.
    // Word will append file extension - do not add an extension here.
    link.download = filename;

    document.body.appendChild(link);

    if (navigator.msSaveOrOpenBlob) {
    navigator.msSaveOrOpenBlob( blob, filename + '.doc'); // IE10-11
    } else {
    link.click(); // other browsers
    }

    document.body.removeChild(link);
    };