J'essaie de produire un rapport en utilisant C#. La première partie du rapport obtient une image visuelle d'un lot (en utilisant Mapguide) et le place dans un fichier PDF Cette partie fonctionne très bien.Générer une image à partir de l'URL. Ne fonctionne pas avec la page aspx?
La partie suivante nécessite la conversion d'une page Web dynamique en une image à insérer dans le PDF. Le problème est que je n'ai aucun contrôle sur la façon dont la page Web est créé, il semble être produit dans le cadre d'un webservice ou une page ASPX (http://nautilus/maint_responsibility/rpt_summary.aspx?lease_code=TL01306)
L'application se bloque tout en essayant de produire une image de l'URL ci-dessus :(Ce est la classe im en utilisant
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Threading;
using System.Windows.Forms;
public class WebsiteToImage
{
private Bitmap m_Bitmap;
private string m_Url;
private string m_FileName = string.Empty;
public WebsiteToImage(string url)
{
// Without file
m_Url = url;
}
public WebsiteToImage(string url, string fileName)
{
// With file
m_Url = url;
m_FileName = fileName;
}
public Bitmap Generate()
{
// Thread
var m_thread = new Thread(_Generate);
m_thread.SetApartmentState(ApartmentState.STA);
m_thread.Start();
m_thread.Join();
return m_Bitmap;
}
private void _Generate()
{
var browser = new WebBrowser { ScrollBarsEnabled = false };
browser.Navigate(m_Url);
browser.DocumentCompleted += WebBrowser_DocumentCompleted;
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
browser.Dispose();
}
private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// Capture
var browser = (WebBrowser)sender;
browser.ClientSize = new Size(browser.Document.Body.ScrollRectangle.Width, browser.Document.Body.ScrollRectangle.Bottom);
browser.ScrollBarsEnabled = false;
m_Bitmap = new Bitmap(browser.Document.Body.ScrollRectangle.Width, browser.Document.Body.ScrollRectangle.Bottom);
browser.BringToFront();
browser.DrawToBitmap(m_Bitmap, browser.Bounds);
// Save as file?
if (m_FileName.Length > 0)
{
// Save
m_Bitmap.SaveJPG100(m_FileName);
}
}
}
public static class BitmapExtensions
{
public static void SaveJPG100(this Bitmap bmp, string filename)
{
var encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
bmp.Save(filename, GetEncoder(ImageFormat.Jpeg), encoderParameters);
}
public static void SaveJPG100(this Bitmap bmp, Stream stream)
{
var encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
bmp.Save(stream, GetEncoder(ImageFormat.Jpeg), encoderParameters);
}
public static ImageCodecInfo GetEncoder(ImageFormat format)
{
var codecs = ImageCodecInfo.GetImageDecoders();
foreach (var codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
// Return
return null;
}
}
Ceci est la partie qui génère l'image.
WebsiteToImage w = new WebsiteToImage("http://nautilus/maint_responsibility/rpt_summary.aspx?lease_code=TL01306");
MemoryStream myMemoryStream = new MemoryStream();
w.Generate().Save(myMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
Si son changé en http://www.google.com.au ou une autre application dans hou ça marche ... vraiment mal à comprendre
Sur quelle ligne est-elle accrochée? Que se passe-t-il si vous essayez simplement de charger la page dans un contrôle WebBrowser? Est-ce que ça traîne là aussi? – Jason
L'URL que vous avez fournie (http://www.nautilus.com/maint_responsibility/rpt_summary.aspx?lease_code=TL01306) donne une erreur 404 Not Found. Est-ce une raison possible? – Chandam
-Jason Lors du chargement directement dans un contrôle WebBrowser, l'URL se bloque. -Chandam Désolé, l'URL est un site intranet. Plus d'infos: Il semble que le site nécessite l'authentification de Windows? Je ne vois pas d'option pour attribuer une authentification à partir d'une session existante? – Jamo