1
votes

What I'm trying to do is get this to print in landscape mode without showing the dialog box. This is what I have so far:

((mshtml.IHTMLDocument2)Browser.Document.DomDocument).execCommand("Print", true, 0);

I know that the instruction to print in landscape mode needs to be sent through the third argument, but I don't know how to construct the third argument to do this. Can anyone give me some help on how to make this last argument accomplish my goal?

2
@froeschli That does not answer the question at all. It might be a simular or better yet RELATED question but it definitely does NOT answer the question asked. He wants to know what to use for the third param and that question you reference only shows how to use the method itself. The other question only gives you an impression that you need to use a path to a file that is being used as a template and does not give you any ideas as to what you actually need to do for the template itself.Arvo Bowen

2 Answers

1
votes

I mostly stick to desktop apps and I don't know how to do what you want. But I did take a quick look at the msdn documentation, and it seems the "Print" command (IDM_EXECPRINT) may not be what you're looking for? According to the documentation for the method, the second parameter should be false if you do not want to display a user interface. That sounds fine except that it looks like the IDM_EXECPRINT command always displays a dialog regardless ("User interface: Yes. Set parameter to true or omit").

msdn documentation: IHTMLDocument2::execCommand Method, IDM_EXECPRINT

Someone please correct me if I'm wrong, but I think you may want to look for another command.

Edit: You might have better luck with the IDM_PRINT command from mshtmcid.h, the dialog is optional for this command. Here's a sample application (in C++): http://msdn.microsoft.com/en-us/library/bb250434(VS.85).aspx

0
votes

ADDITIONS: This is from Microsoft http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.defaultpagesettings%28v=vs.71%29.aspx

public void Printing()
{
   try
   {
      streamToPrint = new StreamReader (filePath);
      try
      {
         printFont = new Font("Arial", 10);
         PrintDocument pd = new PrintDocument(); 
         pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
         pd.PrinterSettings.PrinterName = printer;
         // Set the page orientation to landscape.
         pd.DefaultPageSettings.Landscape = true;
         pd.Print();
      } 
      finally
      {
         streamToPrint.Close() ;
      }
   } 
   catch(Exception ex)
   { 
      MessageBox.Show(ex.Message);
   }
}

So you would probably just replace pd in the example above with your document.


ORIGINAL ANSWER: Possibly integrate:

DefaultPageSettings.Landscape = true;

So maybe something like this:

((mshtml.IHTMLDocument2)Browser.Document.DomDocument).DefaultPageSettings.Landscape = true;
((mshtml.IHTMLDocument2)Browser.Document.DomDocument).execCommand("Print", true, 0);

Taking a little bit of a stab in the dark since C# is a weak spot but I believe this is how I once did it from an C# application.