2017-01-18 20 views
2

asp.netでレンダリングされたかなり単純なHTMLページがあります。 HtmlRenderer.PdfSharpを実行した後、PDFで美しく見えますが、画像は表示されません。 Webページ自体に画像が正しく表示されているにもかかわらず、PDFの欠落している画像の赤いXだけ。ここで画像がPDFで表示されない

は私HtmlRenderer.PdfSharpコードです:

public void BuildPDF(string url, string pdfPath) { 
    string html = GetHTML(url); 
    Byte[] res = null; 
    using(MemoryStream ms = new MemoryStream()) { 
     using(FileStream file = new FileStream(pdfPath, FileMode.Create, FileAccess.Write)) { 
     byte[] bytes = new byte[ms.Length]; 
     var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(html, PdfSharp.PageSize.A4); 
     pdf.Save(ms); 
     res = ms.ToArray(); 
     file.Write(res, 0, res.Length); 
     ms.Close(); 
     } 
    } 
} 

private string GetHTML(string url) { 
    string html = string.Empty; 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
    request.AutomaticDecompression = DecompressionMethods.GZip; 

    using(HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
    using(Stream stream = response.GetResponseStream()) 
    using(StreamReader reader = new StreamReader(stream)) { 
     html = reader.ReadToEnd(); 
    } 

    return html; 
} 

そして、ここでは、PDFにレンダリングされませんのimg htmlです:<img src="images/ChartImg.png" />

は、どのように私はこの問題を解決することができますか?

答えて

4

イメージへの絶対パスを使用します。

<img src="http://example.org/images/ChartImg.png" /> 

あなたは、HTMLを解析し、文字列はPDFコンバータに渡す前に、最初に置き換える行うことができます。

0

それは、このために、このための画像解像度のコールバックを使用することをお勧めします:

var pdf = PdfGenerator.GeneratePdf(html, pdfConfig, imageLoad: OnImageLoad); 

// snip 

private void OnImageLoad(object sender, HtmlImageLoadEventArgs e) 
{ 
    using (var client = new WebClient()) 
    { 
     var url = e.Src; 
     if (!e.Src.StartsWith("http://") && !e.Src.StartsWith("https://")) 
     { 
      url = Properties.Settings.Default.BaseUrl.TrimEnd('/') + e.Src; 
     } 
     using (var stream = new MemoryStream(client.DownloadData(url))) 
     { 
      e.Callback(XImage.FromStream(stream)); 
     } 
    } 
} 
関連する問題