4

I'm trying to convert an HTML string to PDF using Pechkin Synchronised (WkHtmlToPDF). Everything works perfectly apart from one (deal breaking) part.

As part of the HTML string I have an Image tag that references a dynamically generated PNG file over SSL (See below for code). It simply appears as a blank box in the output pdf.

I've checked the docs and turned on every option I can think of and have seen references to WkHtmlToPDF being able to support PNG format and pull data from SSL'd sources.

byte[] pdf = new Pechkin.Synchronized.SynchronizedPechkin(
new Pechkin.GlobalConfig()).Convert(
    new Pechkin.ObjectConfig()
   .SetLoadImages(true)
   .SetPrintBackground(true)
   .SetScreenMediaType(true)
   .SetCreateExternalLinks(true), html);

using (FileStream file = System.IO.File.Create(@"C:\TEMP\Output.pdf"))
{
    file.Write(pdf, 0, pdf.Length);
}

Relevant HTML that references the "missing" image

<img width="385" src="https://www.somehost.com/path/endpoint?type=somedata&amp;height=140&amp;width=2&amp;data=000000000000000000">

Also tried converting the &'s to just &'s to see if that helps like so but sadly it didnt:

<img width="385" src="https://www.somehost.com/path/endpoint?type=somedata&height=140&width=2&data=000000000000000000">

When I hit the link directly through the browser and inspect fiddler reports Content Length 1136, Content Type as image/png and the headers also mention WebSphere and Servlets.

After further testing and help from the owner of the library it seems that SSL is not the problem, its the lack of extension.

Chuck Norris
  • 15,207
  • 15
  • 92
  • 123
Luke Baughan
  • 4,658
  • 3
  • 31
  • 54
  • I've done some more testing, stored a PNG on disk and referenced that and it all worked fine so I don't think its a PNG problem. I've checked the SSL certificate in Chrome which reports no errors. Anyone have any clue as to how I tell Pechkin to go off and download images from SSL'd sites? I also added .SetRenderingDelay option to 15 seconds incase it was timing out - that didn't help either! – Luke Baughan Nov 07 '12 at 12:35
  • OK I've done another test to pull in a static png from an img link with an SSL url - that didn't work either. So I guess the problem is with img tags whose src attribute starts with https... anyone? – Luke Baughan Nov 07 '12 at 13:36
  • My working work-around so far is to traverse the src attributes - pull the images using System.Net.WebClient onto my server (not under SSL) - then replace all the references to my locally hosted copies! This works but its a long way round! – Luke Baughan Nov 07 '12 at 16:31
  • When you run your code (rather than the browser) with Fiddler running, do you see the image being downloaded? – EricLaw Nov 07 '12 at 23:12
  • @EricLaw I never actually thought of that (oddly) I'll check it out today! Fiddler is truly awesome, good luck over at Telerik and Thank you! ;o) – Luke Baughan Nov 08 '12 at 10:03
  • @EricLaw - I've rolled back the code (briefly) and fiddler shows no calls are made during the PDF creation process when using the https link – Luke Baughan Nov 08 '12 at 10:44
  • Can the image be converted to data base64? – chepe263 Mar 01 '13 at 20:56

3 Answers3

3

You can Base64 encode the images and include in inline:

<img src="data:image/jpeg;base64,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" />
Arman H
  • 5,488
  • 10
  • 51
  • 76
  • how will this affect the size of the image? – sports Apr 04 '14 at 19:09
  • This displays an image as it is (uses the "natural" size), but nothing is stopping you from specifying custom image dimensions on the tag or in CSS: `` or `` or ``. – Arman H Apr 04 '14 at 20:05
  • sorry I meant the size in bytes (the length of the file). When you convert the image to base64, you proceed as follows: (1) Create Image object with the image, (2) Transform Image object to bytes and store in MemoryStream, (3) Output memorystream to base64. As you can see, there's a moment that your application is holding in memory the image, so thats something to consider in processing time. – sports Apr 04 '14 at 20:45
  • File size will increase, but not as significantly if you account for the image's file size too. In the example above, the image saved as a JPEG is 20KB and the Base64-encoded string (excluding HTML markup) is 29KB, or ~1/3 bigger. Bigger images could have larger encoding costs. – Arman H Apr 05 '14 at 01:12
  • As for your second point (memory/processing considerations) I value developer's time over CPU power, when the developer is spending time debugging `wkhtmltopdf` errors or needlessly optimizing. IMHO, generating a PDF is not a time-critical task where you have to take image encoding/decoding processing cost into consideration. If that's your case, consider handing these tasks off to background jobs or having a dedicated thread for processing them. – Arman H Apr 05 '14 at 01:14
3

My problems with images having HTTPS urls not being displayed in PDF were solved by replacing Pechkin with this fork:

https://github.com/tuespetre/TuesPechkin

Replacing is quite straightforward, as well as the usage:

        using TuesPechkin;
        ...            

        string html = "<img src=\"https://www.google.com/images/srpr/logo11w.png\" alt=\"Google logo\" />";
        IPechkin converter = Factory.Create();
        byte[] bytes = converter.Convert(html);
Dan Mirescu
  • 821
  • 8
  • 12
0

I also had this problem (images under HTTPS are not rendered inside the PDF). The solution is to download and install OpenSSL on the web server.

Here you can find the OpenSSL distribution for Windows: http://www.openssl.org/related/binaries.html

So, I installed this one and it worked: http://slproweb.com/download/Win32OpenSSL_Light-1_0_1e.exe

Because I had several problems with Pechkin, I wrote a post on my blog, here is the link if anyone interested: http://codeutil.wordpress.com/2013/09/16/convert-html-to-pdf

Rap
  • 6,851
  • 3
  • 50
  • 88
mightymada
  • 121
  • 1
  • 4