5,442,164 members and growing! (16,460 online)
Email Password   helpLost your password?
Web Development » HTML / CSS » CSS     Intermediate

Printing with Style

By Per S

Make your web pages printer-friendly.
Javascript, HTMLWin2K, WinXP, Win2003, Windows, Dev

Posted: 16 Sep 2003
Updated: 23 Sep 2003
Views: 162,546
Bookmarked: 80 times
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
24 votes for this Article.
Popularity: 6.30 Rating: 4.57 out of 5
2 votes, 8.3%
1
0 votes, 0.0%
2
3 votes, 12.5%
3
2 votes, 8.3%
4
17 votes, 70.8%
5

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



Occupation: Web Developer
Location: Norway Norway

Other popular HTML / CSS articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 25 of 25 (Total in Forum: 25) (Refresh)FirstPrevNext
Subject  Author Date 
GeneralIs it possible to define print preferences in window.print()membercodrakon3:52 17 Mar '06  
GeneralIE 6.0.2900.2180memberDregor1:36 18 Dec '05  
Generala lot of great css ebooks in http://www.ebook5.comsussAnonymous1:36 12 Aug '05  
GeneralPrintig defined areamembertauchert3:45 26 Apr '05  
GeneralIt was very usefulmemberTanGkaK15:47 7 Apr '05  
Generalprint landscape & page break w/ StylememberCZIU12:34 5 May '04  
GeneralRe: print landscape & page break w/ StylesussQuetininha6:27 28 May '04  
GeneralRe: print landscape & page break w/ StylesussAnonymous11:35 29 Jul '04  
GeneralRe: print landscape & page break w/ Stylemembermjjvol2:29 21 Sep '04  
GeneralPlease help me~membercharcoalc1:50 5 May '04  
GeneralRe: Please help me~sussAnonymous8:14 24 Sep '04  
GeneralPrinting with more StylesussPer Søderlind5:43 10 Mar '04  
GeneralRe: Printing with more StylesussPer Søderlind5:49 10 Mar '04  
GeneralPrinting without page headersmemberkrixerx21:24 1 Oct '03  
GeneralRe: Printing without page headersmemberDheth4:42 2 Oct '03  
GeneralRe: Printing without page headersmemberStephen Quattlebaum7:39 16 Oct '03  
GeneralRe: Printing without page headersmemberDheth21:46 16 Oct '03  
GeneralRe: Printing without page headerssussAnonymous4:21 26 Aug '04  
GeneralRe: Printing without page headerssussAnonymous10:44 3 Sep '04  
GeneralRe: Printing without page headersmemberIn-Active10:09 6 Apr '05  
GeneralVery usefulmemberJohn Cardinal16:36 23 Sep '03  
GeneralGreate! And, fun to se some one from Norway in here.memberJonas Follesø10:48 18 Sep '03  
GeneralRe: Greate! And, fun to se some one from Norway in here.memberPer Soderlind15:25 18 Sep '03  
GeneralRe: Greate! And, fun to se some one from Norway in here.memberE.Data Studios14:54 24 Sep '03  
GeneralWell DonememberBlake Coverett9:25 18 Sep '03  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 23 Sep 2003
Editor: Smitha Vijayan
Copyright 2003 by Per S
Everything else Copyright © CodeProject, 1999-2008
Web08 | Advertise on the Code Project