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

Print HTML in C# with or without the web browser control and the print dialog

By , 23 Jan 2006
 

Sample Image - printhml.jpg

Introduction

Printing with the web browser control in .NET platform is not hard work. But the challenge for me was to navigate to a specific URL and then print the document with a single click event. There was another challenge I had to face, when I tried to print an HTML document from its source in the same manner.

Well, this article describes some techniques to print an HTML document with that challenge (if anyone thinks so). This code is also able to print an HTML page without the print dialog. So, if any one needs printing without any user interaction, this code may be helpful for you. In addition, this code is also able to print an HTML document without any web browser control in the form.

Background

This project came out of a work requirement for some kind of a content management system. I needed to be able to print HTML without any user interaction and also print the HTML source directly.

Using the code

If you want to show a web page in your own form, you have to add a web browser control (I will name it axW in this article). Now, if you want to print a page which is already loaded in your web browser control, just add two lines of code to print the page:

For printing with print dialog:

object em =null;
axW.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, 
           SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_PROMPTUSER, 
           ref em, ref em);

For printing without print dialog:

axW.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, 
           SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, 
           ref em, ref em);

Now, what if you want to navigate and print with a single click? You have to navigate the web browser to a specific URL with its Navigate method and wait until it loads the whole HTML page. That is:

for(;axW.ReadyState!=SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE;)
{
    System.Windows.Forms.Application.DoEvents();
}

Then print the page with any of the previous options you want.

Now, if you want to print an HTML page from its source, what should do is, just add the HtmlPrinter project to your solution. Then go to Add References option, by right clicking on your own project. From the Project tab, select the HtmlPrinter project.

Now, to print directly, you need to create a HtmlPrinter object and then call its PrintUrlFromMemory method with the URL as its parameter.

using HtmlPrinter;

hpObj=new HtmlPrinter.HtmlPrinter();
hpObj.PrintUrlFromMemory(txtUrl.Text);

Now, you add the code in your project to print the HTML page from its source text:

HtmlPrinter.HtmlPrinter hpObj=new HtmlPrinter.HtmlPrinter();
hpObj.PrintHtml(txtString.Text, true);

If you want to print without the print dialog, then use the following line:

hpObj.PrintHtml(txtString.Text, false);

Points of Interest

Working with MSHTML's interfaces and classes is pretty complex. So I suggest, before you work on it, try to know about the basic structure of MSHTML and of course about COM.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Borun
Architect Unicorn Software & Solutions
Bangladesh Bangladesh
Member
I am a cooker in Unicorn Software & Solution,Bangladesh and I fairly cook my own brain with my own taste, patience and intelligence to serve our clients. I have to try to take care as much items as in our dish and thus I burn myself in our kitchen and think to leave those there....but i never can..Perhaps I am cooker by born.

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   
QuestionDLL SIte link:memberhrojasara26 Apr '13 - 18:07 
QuestionReferencesmembermrcouthy15 Apr '13 - 4:05 
Questionhow to print to bullzip pdf printer?memberNguyen Luong Son6 Sep '12 - 21:43 
Questionhow about pdf & doc files?memberPavan Nagumalli4 Sep '12 - 21:30 
QuestionOrientationmemberLWFDN1 Jul '12 - 7:48 
AnswerRe: OrientationmemberBorun1 Jul '12 - 8:14 
AnswerRe: OrientationmemberAlejandro Miralles7 Aug '12 - 13:02 
QuestionWorks but can't print two pages? [modified]memberanalog99912 Jun '12 - 11:10 
AnswerRe: Works but can't print two pages?memberAlejandro Miralles7 Aug '12 - 13:00 
Questionprinting doesn't work properlymemberTLOH4529 Sep '11 - 23:13 
AnswerRe: printing doesn't work properlymemberAlejandro Miralles7 Aug '12 - 13:01 
QuestionC++?memberrvangaal1 Aug '11 - 3:07 
GeneralMy vote of 5memberMember 16043004 Nov '10 - 0:16 
QuestionGot an error - some included library is not in projectmemberShaharM25 Sep '10 - 6:31 
AnswerRe: Got an error - some included library is not in projectmemberPavan Nagumalli12 Apr '12 - 23:12 
QuestionIs there a way to print without opening the form?membershiravidas25 Aug '10 - 21:24 
GeneralNice little tool. ThanksmemberJoseph Growney16 Mar '10 - 6:55 
GeneralRe: Nice little tool. ThanksmemberBorun16 Mar '10 - 19:28 
GeneralMy vote of 1memberTrenton Adams3 Dec '09 - 8:41 
GeneralWPF (.NET 3.5)memberyvisek19 Nov '09 - 7:55 
QuestionC# ExecCommandmemberBMW74015 Nov '09 - 21:44 
GeneralVB.net VersionmemberMember 43764219 Oct '09 - 11:17 
QuestionCan generate a thumb of webpage from html?memberMember 45548952 Sep '09 - 13:17 
Generalpage settings would be great!!membernin824 Mar '09 - 10:56 
GeneralPrint Html page in C#memberBabita Shivade4 Mar '09 - 3:47 
Questionno htmlprint namespacememberjoelha2000125 Feb '09 - 8:52 
GeneralhimemberBabita Shivade19 Feb '09 - 1:12 
GeneralInvalidActiveXStateExceptionmemberAndrewLe7 Oct '08 - 17:42 
GeneralNeed to run in x64 bit machinememberv.jayakrishnan9 Jul '08 - 21:26 
GeneralWait for print dialog ok before continuing [modified]memberpetebob7961 Apr '08 - 22:57 
QuestionCan it export ot dll and run on IEmemberNguoi Lap Trinh15 Nov '07 - 16:43 
QuestionIs there a vb.net version of this code?membertimescale7 Nov '07 - 7:29 
GeneralIt is the little things that countmemberMichaelJRD12 Oct '07 - 5:24 
QuestionSame solution for ASP.NET??memberYendi2 Jul '07 - 11:12 
GeneralThanksmemberJeweel17 May '07 - 1:42 
GeneralIE Script Error when run in servicememberblahblahblaahlaksjdf20 Apr '07 - 4:54 
GeneralRe: IE Script Error when run in servicememberRaghuSetty14 Oct '08 - 0:49 
GeneralPrinting format optionsmembernetJP12L11 Dec '06 - 8:30 
GeneralCustom header and footersmemberMukund Pujari28 Jun '06 - 23:45 
AnswerRe: Custom header and footersmemberBorun13 Aug '06 - 6:12 
GeneralRe: Custom header and footersmemberyvisek29 Nov '09 - 9:26 
GeneralRe: Custom header and footersmemberPavan Nagumalli4 Sep '12 - 21:27 
GeneralPrinter Namememberrev12313 Jun '06 - 10:27 
GeneralRe: Printer Namememberdrekon7518 Jul '06 - 6:02 
GeneralRe: Printer NamememberPete O'Hanlon1 Dec '06 - 0:51 
GeneralRe: Printer Namememberdsandhya14 Mar '07 - 12:58 
GeneralPrint to System.Drawing.Printing.PrintDocumentmemberWelliton Alves Toledo19 May '06 - 4:52 
GeneralThanksmemberMukund Pujari11 May '06 - 17:32 
GeneralRe: ThanksmemberBorun11 May '06 - 21:34 
Generalcustom libraries in the referencemembertantc23 Feb '06 - 17:22 

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

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130516.1 | Last Updated 24 Jan 2006
Article Copyright 2006 by Borun
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid