1616using System . Threading ;
1717using System . Windows ;
1818using System . Windows . Media . Imaging ;
19+ using PdfSharp . Drawing ;
1920using TheArtOfDev . HtmlRenderer . Core . Entities ;
2021using TheArtOfDev . HtmlRenderer . Demo . Common ;
2122using TheArtOfDev . HtmlRenderer . WPF ;
@@ -60,6 +61,7 @@ public static BitmapEncoder GetBitmapEncoder(string ext)
6061 return new PngBitmapEncoder ( ) ;
6162
6263 }
64+
6365 }
6466
6567 /// <summary>
@@ -118,12 +120,29 @@ public static void OnImageLoad(object sender, HtmlImageLoadEventArgs args)
118120 ImageLoad ( args ) ;
119121 }
120122
123+ /// <summary>
124+ /// On image load in renderer set the image by event async.
125+ /// </summary>
126+ public static void OnImageLoadPdfSharp ( object sender , HtmlImageLoadEventArgs args )
127+ {
128+ ImageLoad ( args , true ) ;
129+ }
130+
121131 /// <summary>
122132 /// On image load in renderer set the image by event async.
123133 /// </summary>
124134 public static void ImageLoad ( HtmlImageLoadEventArgs e )
135+ {
136+ ImageLoad ( e , false ) ;
137+ }
138+
139+ /// <summary>
140+ /// On image load in renderer set the image by event async.
141+ /// </summary>
142+ public static void ImageLoad ( HtmlImageLoadEventArgs e , bool pdfSharp )
125143 {
126144 var img = TryLoadResourceImage ( e . Src ) ;
145+ var imgObj = pdfSharp ? ( object ) ( img != null ? CreatePdfSharpImage ( img ) : null ) : img ;
127146
128147 if ( ! e . Handled && e . Attributes != null )
129148 {
@@ -150,13 +169,31 @@ public static void ImageLoad(HtmlImageLoadEventArgs e)
150169 {
151170 var split = e . Attributes [ "byrect" ] . Split ( ',' ) ;
152171 var rect = new Rect ( Int32 . Parse ( split [ 0 ] ) , Int32 . Parse ( split [ 1 ] ) , Int32 . Parse ( split [ 2 ] ) , Int32 . Parse ( split [ 3 ] ) ) ;
153- e . Callback ( img ?? TryLoadResourceImage ( "htmlicon" ) , rect . X , rect . Y , rect . Width , rect . Height ) ;
172+ var defaultResourceImage = TryLoadResourceImage ( "htmlicon" ) ;
173+ var defaultImg = pdfSharp && defaultResourceImage != null ? ( object ) CreatePdfSharpImage ( defaultResourceImage ) : defaultResourceImage ;
174+ e . Callback ( imgObj ?? defaultImg , rect . X , rect . Y , rect . Width , rect . Height ) ;
154175 return ;
155176 }
156177 }
157178
158179 if ( img != null )
159- e . Callback ( img ) ;
180+ e . Callback ( imgObj ) ;
181+ }
182+
183+ /// <summary>
184+ /// Convert image to PNG before creating <see cref="XImage"/> because PdfSharp does not support GIF streams.
185+ /// </summary>
186+ private static XImage CreatePdfSharpImage ( BitmapSource image )
187+ {
188+ var encoder = new PngBitmapEncoder ( ) ;
189+ encoder . Frames . Add ( BitmapFrame . Create ( image ) ) ;
190+
191+ using ( var ms = new MemoryStream ( ) )
192+ {
193+ encoder . Save ( ms ) ;
194+ ms . Position = 0 ;
195+ return XImage . FromStream ( ms ) ;
196+ }
160197 }
161198 }
162199}
0 commit comments