posted on May 11, 2016 Show version history

All,

After reading a few posts that stated that WebLink 9.x does not offer the ability to print text only documents I decided to quickly whip up a script that would allow you to do just that. Please feel free to modify and use however you wish and I hope this helps!

 

Steps

  1. Open "DocView.aspx" in any editor and add the following code right before the "</body>" element:
     
    <script type="text/javascript" src="<%= Page.ResolveUrl("~/script/print_plain_text.js")%>"></script>


     

  2. Copy and paste the following JavaScript code into a new text document and save it as "print_plain_text.js" in your "script" folder in the WebLink \ Web Files directory:

     

    $(document).ready(function () {
        var html = '<a href="javascript:void(0);" class="PageToolbarLink" id="PrintText" runat="server" rel="nofollow" title="Print (as Plain Text)"><div class="ToolbarIconWrapper"><div class="DocumentRightPanelToolbarIcon PrintIcon" id="PrintTextButton" runat="server" title="Print (as Plain Text)" /></div><span>TXT</span></a>';
        $(html).insertBefore('#SendEmailLink');
        $('#PrintText').click(function () { print_plain_text(); });
    });
    
    function print_plain_text() {
        var a = '';
    
        $('.TextLayer').each(function (i) {
            var b = ($(this).html());
            var c = b.indexOf('This page contains no text.') > -1;
            if (!c)
                a += ($(this).html());
        });
    
        if (a.length > 0) {
            var b = $(a);
            b.print();
        } else {
            alert('There was no text found to print or you are not viewing this document in Plain Text Mode.');
        }
    }
    
    //https://gist.github.com/btd/2390721
    // Create a jquery plugin that prints the given element.
    jQuery.fn.print = function () {
        // NOTE: We are trimming the jQuery collection down to the
        // first element in the collection.
        if (this.size() > 1) {
            this.eq(0).print();
            return;
        } else if (!this.size()) {
            return;
        }
    
        // ASSERT: At this point, we know that the current jQuery
        // collection (as defined by THIS), contains only one
        // printable element.
    
        // Create a random name for the print frame.
        var strFrameName = ("printer-" + (new Date()).getTime());
    
        // Create an iFrame with the new name.
        var jFrame = $("<iframe name='" + strFrameName + "'>");
    
        // Hide the frame (sort of) and attach to the body.
        jFrame
        .css("width", "1px")
        .css("height", "1px")
        .css("position", "absolute")
        .css("left", "-9999px")
        .appendTo($("body:first"))
        ;
    
        // Get a FRAMES reference to the new frame.
        var objFrame = window.frames[strFrameName];
    
        // Get a reference to the DOM in the new frame.
        var objDoc = objFrame.document;
    
        // Grab all the style tags and copy to the new
        // document so that we capture look and feel of
        // the current document.
    
        // Create a temp document DIV to hold the style tags.
        // This is the only way I could find to get the style
        // tags into IE.
        var jStyleDiv = $("<div>").append(
        $("style").clone()
        );
    
        // Write the HTML for the document. In this, we will
        // write out the HTML of the current element.
        objDoc.open();
        objDoc.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
        objDoc.write("<html>");
        objDoc.write("<body>");
        objDoc.write("<head>");
        objDoc.write("<title>");
        objDoc.write(document.title);
        objDoc.write("</title>");
        objDoc.write(jStyleDiv.html());
        objDoc.write("</head>");
        objDoc.write(this.html());
        objDoc.write("</body>");
        objDoc.write("</html>");
        objDoc.close();
    
        // Print the document.
        objFrame.focus();
        objFrame.print();
    
        // Have the frame remove itself in about a minute so that
        // we don't build up too many of these frames.
        setTimeout(
        function () {
            jFrame.remove();
        },
        (60 * 1000)
        );
    }


     

  3. Save DocView.aspx and refresh. You should now see a printer icon next to the email icon with "TXT" next to it.

  4. Please remember that in order to print the text of the document you will need to be in the "View plain text" window.

5 0