[C#] WebBrowser.ExecWB printen met templates

Pagina: 1
Acties:
  • 140 views sinds 30-01-2008
  • Reageer

  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Op MSDN staat een artikel over de printen met templates mogelijkheden van IE 5.5 en hoger: Beyond Print Preview: Print Customization for Internet Explorer 5.5. Deze functionaliteit zou ik graag kunnen gebruiken vanuit C#.

Vandaar heb ik een Console application geschreven, hieronder wat samengeraapte code daaruit.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Create a 
InternetExplorerClass ieApplication = new InternetExplorerClass();
IWebBrowser2 webBrowser = (IWebBrowser2) ieApplication;
string url = "C:/sample.html";

// Retrieve the webpage
webBrowser.Navigate(url, ref o, ref o, ref o, ref o);
            
// Wait for the webpage retrieval to be complete (temporary nasty solution)
while (webBrowser.Busy) {}

// Print the webpage without prompt
object template = "C:/template.html";

// Case A
webBrowser.ExecWB(
    SHDocVw.OLECMDID.OLECMDID_PRINT,
    SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, 
    ref missing,
    ref missing);

// Case B
webBrowser.ExecWB(
    SHDocVw.OLECMDID.OLECMDID_PRINT,
    SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, 
    ref template,
    ref missing);


Het doel is een webpagina op te halen en vervolgens zonder prompt te printen volgens een bepaalde template. De template heb ik nodig om de header en footer en liefst ook page orientation te bepalen.

Je ziet hierboven twee commando's staan (case A en case B). Case A print de pagina volgens IE's standaard interne template. Case B doet helemaal niks, het commando wordt niet uitgevoerd en er wordt niks geprint.

Volgens een MSDN over dit soort COM communicatie, is het veld waar template in gestopt wordt een VT_BSTR argument:

http://msdn.microsoft.com...e/constants/IDM_PRINT.asp

C# zou zelf de string naar een VT_BSTR moeten marshallen heb ik gelezen.


Kortom waarom werkt deze aanpak niet en hoe fix ik het?

Ik heb google echt afgestruind, maar je vind alleen maar COM/C++ voorbeelden, die ik met geen mogenlijkheid naar C# krijg.

Any sufficiently advanced technology is equivalent to magic.


Verwijderd

Misschien is Html Printing iets wat je kan gebruiken.
Ik gebruik het om pagina's te printen zonder prompt.
Je kan bijna alle settings van de printer van te voren instellen.

[url=htpp://www.htmlprinting.com]www.htmlprinting.com[/url]

  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Ai, htmlprinter.com is een activex oplossing.

Het is prima mogelijk in C++, maar in C# doet hij gewoon helemaal niks als je een template opgeeft :'(

Is het mogenlijk om op simpele wijze een C++ dll in visual studio in elkaar te schroeven en deze gemakkelijk te gebruiken vanuit C#, dan is mn probleem denk ik ook opgelost.

Any sufficiently advanced technology is equivalent to magic.


  • Willem
  • Registratie: Februari 2001
  • Laatst online: 01:06
In Programming & Webscripting kunnen ze er iets meer mee ;)

Vandaar de move /13 > /14

Motor (of auto) onderhoud bijhouden


  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Thnx
Ik had m per ongeluk in het verkeerde subforum geplaatst 8)7

Kan iemand mij assisteren in bovenstaand(e) proble(e)m(en)?

Any sufficiently advanced technology is equivalent to magic.


  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Inweze raar dat iets wel mogenlijk is vanuit C++ en niet vanuit C#

Any sufficiently advanced technology is equivalent to magic.

Pagina: 1