Click here to Skip to main content
Click here to Skip to main content

Printing with Style

By , 23 Sep 2003
 

Introduction

There're a lot of techniques used on the net to create nice looking prints from web pages. Some take a copy of the pages and remove unwanted elements manually, some do it by opening a new print-friendly page using a server side script (ASP, PHP, Perl, ...). I prefer doing it with style :-)

Style

Doing it with style is simple and elegant; you create a separate style sheet with elements suited for print:

  • Set the background to white (background:#ffffff;)
  • Underline links (text-decoration:underline), and maybe color them blue for users with a color printer
  • Hide unwanted parts using display:none;

You attach the style sheet using:

<head>
<link rel="stylesheet" type="text/css" href="..." media="print" />
</head>

media="print" (IE 4+, Netscape 6+ and Opera 3.62+) tells the browser to use this only when you print the page.

This is how I attach my print.css.

<link rel="stylesheet" type="text/css" 
   href="css/print.css" media="print" />

You can test it by printing one of my pages, if you print my Links page you'll also see how I append external links (IE 6+ only):

body { 
    color : #000000; 
    background : #ffffff; 
    font-family : verdana,arial,sans-serif;
    font-size : 12pt;  
}
h2 {
    font-size : 14pt;
}
a { 
    text-decoration : underline; 
    color : #0000ff; 
}

#logo,#head,#menu,#tail,#printicon, {
    display : none;
}

#appendedlinks {
    page-break-before: always 
}

Append external links

A nice feature is to append all external links in the webpage, to the print document. This is implemented on my pages using the following JavaScript:

// 
// IE only: attach eventhandlers.
// They trigger when a user  prints a web page; 
//     From File->Print, File->Print Preview or
//     by executing a window.print() command 
//
window.onbeforeprint=beforePrint
window.onafterprint=afterPrint

function beforePrint() {
    appendlinks(content);
}

function afterPrint() {
    removelinks(appendedlinks);
}


//
// Generic print function, called from the web page
//
function printContent() {
    if (window.print) {
           window.print();
    } else {
        alert("your browser doesn't support this function")
    }
}


// 
// When appending links to the document, do not 
// append links pointing to the following domains / sites
//

var excludedomains=["soderlind.no", "soderlind.org","localhost"]
var excludedomains=excludedomains.join("|")
rexcludedomains=new RegExp(excludedomains, "i")

//
// appendlinks(id)
// id = id of the part of the web page you want to extract links from
//      ex: document.body
//

function appendlinks(id){
    
    var strD = "<p/>";
    var num = 0;
    if (document.getElementById){
        var links=id.getElementsByTagName("A")    
        var total=links.length
        strD += "<dl id=\"appendedlinks\" border=0>"
        strD += "<dt><h2>Links extracted from the document:</h2></dt>"
        for (i=0;i<total;i++){
            if (links[i].hostname.search(rexcludedomains)==-1 
                && links[i].href.indexOf("http:")!=-1) {
                strD += '<dt>'+links[i].innerText+'</dt>'
                strD += '<dd>'+links[i]+'</dd>'
                num++;
            }
        }
        strD += "</dl>"

        if (id.insertAdjacentHTML && num>0)
            id.insertAdjacentHTML("beforeEnd",strD);
    }
}

//
// removelinks(id)
// After the print job is done, remove the appended links from the document
// id = appendedlinks
//
function removelinks(id) {
    if (document.getElementById){
        id.removeNode(true);
    }
}

Have fun coding (and printing).

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Per S
Web Developer
Norway Norway
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralIs it possible to define print preferences in window.print()membercodrakon17 Mar '06 - 2:52 
GeneralIE 6.0.2900.2180memberDregor18 Dec '05 - 0:36 
Generala lot of great css ebooks in http://www.ebook5.comsussAnonymous12 Aug '05 - 0:36 
GeneralPrintig defined areamembertauchert26 Apr '05 - 2:45 
GeneralIt was very usefulmemberTanGkaK7 Apr '05 - 14:47 
Generalprint landscape &amp; page break w/ StylememberCZIU5 May '04 - 11:34 
@page {
size: landscape;
margin: 0.25in;
}
td {
page-break-before: always
}
 
save it to a print.css and then link it to a .aspx page
When I view in preview, I don't see any difference
 
please help!
GeneralRe: print landscape &amp; page break w/ StylesussQuetininha28 May '04 - 5:27 
GeneralRe: print landscape &amp; page break w/ StylesussAnonymous29 Jul '04 - 10:35 
GeneralRe: print landscape &amp; page break w/ Stylemembermjjvol21 Sep '04 - 1:29 
GeneralPlease help me~membercharcoalc5 May '04 - 0:50 
GeneralRe: Please help me~sussAnonymous24 Sep '04 - 7:14 
GeneralPrinting with more StylesussPer Søderlind10 Mar '04 - 4:43 
GeneralRe: Printing with more StylesussPer Søderlind10 Mar '04 - 4:49 
GeneralPrinting without page headersmemberkrixerx1 Oct '03 - 20:24 
GeneralRe: Printing without page headersmemberDheth2 Oct '03 - 3:42 
GeneralRe: Printing without page headersmemberStephen Quattlebaum16 Oct '03 - 6:39 
GeneralRe: Printing without page headersmemberDheth16 Oct '03 - 20:46 
GeneralRe: Printing without page headerssussAnonymous26 Aug '04 - 3:21 
GeneralRe: Printing without page headerssussAnonymous3 Sep '04 - 9:44 
GeneralRe: Printing without page headersmemberIn-Active6 Apr '05 - 9:09 
GeneralVery usefulmemberJohn Cardinal23 Sep '03 - 15:36 
GeneralGreate! And, fun to se some one from Norway in here.memberJonas Follesø18 Sep '03 - 9:48 
GeneralRe: Greate! And, fun to se some one from Norway in here.memberPer Soderlind18 Sep '03 - 14:25 
GeneralRe: Greate! And, fun to se some one from Norway in here.memberE.Data Studios24 Sep '03 - 13:54 
GeneralWell DonememberBlake Coverett18 Sep '03 - 8:25 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130523.1 | Last Updated 24 Sep 2003
Article Copyright 2003 by Per S
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid