Il est également possible de le faire avec un navigateur Web intégré. Notez cependant que, comme il peut s'agir d'un fichier local, et aussi parce qu'il ne s'agit pas directement du navigateur et qu'il n'y a pas de DOM, il n'y a pas d'état prêt.
Voici le code de l'approche que j'ai élaborée sur un contrôle de navigateur web de type win form :
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(@"path\to\file");
}
private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
//Progress Changed fires multiple times, however after the Navigated event it is fired only once,
//and at this point it is ready to print
webBrowser1.ProgressChanged += (o, args) =>
{
webBrowser1.Print();//Note this does not print only brings up the print preview dialog
//Should be on a separate task to ensure the main thread
//can fully initialize the print dialog
Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);//We need to wait before we can send enter
//This assumes that the print preview is still in focus
Action g = () =>
{
SendKeys.SendWait("{ENTER}");
};
this.Invoke(g);
});
};
}