2010-06-08 4 views
2

Dans l'ensemble, je suis en train d'écrire une page Web au format PDF. Il existe un service Web que je peux utiliser pour convertir un fichier en pdf. Donc, ce que j'essaie de faire est de sauvegarder une page Web à partir du contrôle Winforms WebBrowser.Comment enregistrer une page Web complète en utilisant le navigateur Web intégré dans C#

J'ai déjà essayé d'écrire le flux de documents mais cela me donne juste le code HTML de la page et non les images qui sont utilisées avec.

Une autre façon de voir, mais sans succès, est de créer une image du document WebBrowser. J'ai trouvé quelques exemples sur le web qui utilisent la fonction DrawToBitmap mais aucun d'eux n'a fonctionné pour moi.

Toute aide serait reconnaissante.

+0

Copies possibles: http://stackoverflow.com/questions/564650/convert-html-to-pdf-in-net http://stackoverflow.com/questions/570179/generate-pdf-from-asp-net-from -raw-html-css-content http: // pileov erflow.com/questions/598980/generation-pdf-from-html-component-for-net http://stackoverflow.com/questions/973861/convert-html-document-into-pdf-using-c http: //stackoverflow.com/questions/589852/export-from-html-to-pdf-c http://stackoverflow.com/questions/936508/how-to-render-html-chunk –

Répondre

0

Pour créer le fichier PDF, le programme que vous utilisez aura besoin du code source du site. Que vous utilisiez le contrôle WinForms de WebBrowser ou quelque chose d'autre pour obtenir cette information, cela n'a aucune réelle différence.

Ce code obtenir le code source d'un site pour vous, en supposant que vous n'avez pas besoin de télécharger d'abord des choses:

string url = "some site"; 
string source = string.Empty; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
using(StreamReader sr = new StreamReader(response.GetResponseStream()){ 
    source = sr.ReadToEnd(); 
} 
0

Vous pouvez prendre des captures d'écran jusqu'à ce que vous avez la page entière en utilisant la fonction Graphics.CopyFromScreen.

// Get screen location of web browser 
Rectangle rec = webBrowser1.RectangleToScreen(webBrowser1.ClientRectangle); 
// create image to hold whats in view 
Bitmap image = new Bitmap(rec.Width, rec.Height); 
// get graphics to draw on image 
Graphics g = Graphics.FromImage(image); 
// Save into image 
// From MSDN: 
//public void CopyFromScreen(
// int sourceX, 
// int sourceY, 
// int destinationX, 
// int destinationY, 
// Size blockRegionSize 
//) 
g.CopyFromScreen(rec.X,rec.Y,0,0,rec.Size) 

Vous pouvez également supprimer les barres de défilement de sorte qu'ils ne sont pas dans votre image:

webBrowser.ScrollBarsEnabled = false; 
webBrowser.Document.Body.Style = "overflow:hidden;"; 

Et puis faites défiler vers le bas pour prendre une photo de la page suivante:

webBrowser.Document.Window.ScrollTo(x,y); 
Questions connexes