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.
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
. 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.
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
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.