Preview PDF files as images on your website

by Damiaan Peeters 9. January 2017 20:41

We got a question, and said yes.  If we can do that?  Yes, we can! When you get back at the office you get a cold shiver along your spine when you discover there is no NuGet package available for you to install.

What was the question

The client regularly publishes articles in magazines and journals.  They repost the article on their own website.  Content marketing they told me.  On their old website they had to upload a PDF and a thumbnail of the pdf. 

But dear web builder, you can do better right? Umbraco is a CMS build for content editors and is easy to extent.  Please put the thumbnail automatically inside our website.

The search

There seem to be several products on the market for several thousands of dollars. But the client would not be willing to pay for licenses. The typical conversion could have been like this:

You are building on a large ecosystem of free and open software, right? Yes, dear client. And PDF is an open format right? Yes, dear client. I could not be the first ever to ask this, right? No, dear client.  Can't you ask your friendly colleagues of this friendly CMS?  Sure, dear client. (*)

I tried a few .net managed libraries which I found on the internet.  But most of the managed free PDF libraries you find online are

  1. not working,
  2. incomplete,
  3. in beta
  4. provide a very small subset of what you can do with PDF.
  5. Or simple do not support rendering a PDF to another digital format (like PNG or JPEG).
  6. Or are a wrapper around (some obscure) unmanaged DLL’s

The only way out would be to start a new managed library to read PDF files.  Which can’t be too hard, because it’s mostly PostScript, right?  But going down that path, took already several hours.  Precious time which we did not had.  It was Christmas holiday after all.

From the commercial pallet of products, I did tried Imazen’s Resizer.Net and it worked, but having 2 image processors was complete overkill, and was not playing along with ImageProcessor.  However that could have been me messing around with various dll’s.

Because I lost all hope at finding a complete managed (.net) solution, and because I already found several NuGet packages wrapping GhostScript, we decided to settle.  GhostScript is a pretty mature product after all.

The solution: using ImageProcessor and GhostScript(.net)

We choose GhostScript.Net to be our wrapper around GhostScript.  Mostly because the logo was very nice, certainly compared to the other wrappers available. 

Further we did a small POC proving it worked.  The code is pretty simple:

var rasterizer = new GhostscriptRasterizer();
rasterizer.Open(pdfUri, lastInstalledVersionOfGhostScript, false);
System.Drawing.Image img = _rasterizer.GetPage(_desiredXDpi, _desiredYDpi, pageNumber);
rasterizer.Close();

This very simple code did what we needed.  It converted the (first) page of a PDF to an image format.  It was very simple to create a .Net handler for this to create an image.  But we wanted to have a better dev experience.  And also be able to resize easier.

ImageProcessor to the rescue

The best advice from last year (2016) is: build on the shoulder of giants.  If you have not met James South, it’s a giant.  He is way over 2 meter big, and strong as an elephant. He knows to drink, like a real Scott, and moved to Australia a catch his own food with his bear hands.  Or not.  But he IS a craftsmen and builder of the marvelous ImageProcessor, used and distributed along with Umbraco.

So we wondered if Imageprocessor could support a different file format, like… PDF, we would have a solution.

It turns out that is not too hard.  Just create a new class inherited from FormatBase, override the appropriate members.  If you override the LOAD method of the base class, you could load a PDF, rasterize it, and pass the System.Drawing.Image object to ImageProcessor.  It will handle everything for you?

For example: /media/1234/myPublication.pdf?width=500

Let us serve other clients to!

We do have other clients uploading PDF’s from time to time.  I am pretty sure that we will be installing this plugin to avoid the next support request: “image not showing on website”.

The code is available on github: https://github.com/dampee/ImageProcessor.Plugins.Pdf/

A NuGet package is available too: https://www.nuget.org/packages/ImageProcessor.Plugins.PDF/

 

Let me know what you think of the package.

 

(*) this is fiction, they are actually very nice and polite.  It is only me, myself and I taking blame for the path we took.

 

 

 

 

h1 {font-size: 4vw;}

by Damiaan Peeters 3. September 2012 22:28

Not that I am a CSS guru.  Far from…  But these type of measuring got me thinking about mobile design.  It opens a lot of opportunities to get your site easier readable on mobile devices…

  • Vw means viewport width,
  • Vh becomes the viewport height
  • Vmin for the smallest of the two above (vw & vh)

Browser support currently: Chrome20+, Safari 6 en IE9. (or check here for more up-to-date information http://caniuse.com/viewport-units).

Firefox screenshot tool in developer tools

by Damiaan Peeters 1. September 2012 14:55

Making lots of screenshots from your browser?  Then look at the new firefox command line developer tools.

  • Type SHIFT + F2
  • type “screenshot myfile.png”
  • hit return, and you have a screenshot saved in your downloads directory.

firefox screenshot devtools

JavaScript editor extension for vs2010

by Damiaan Peeters 4. September 2011 15:41

If you have been developing JavaScript in visual studio 2010 and know you are missing the brace matching and cold folding capabilities. Apparently there is a plug-in supporting these useful features for JavaScript, it’s called the Jscript Editor Extensions.

Many thanks to Katrien De Grave who blogged about it!

10 Year on Open Source

by Damiaan Peeters 7. July 2010 15:46

Apparently, this year I am celebrating my 10th anniversary on sourceforge.net.  You can see this on my sourceforge profile page.

 image

Not to be proud of really.  I did not created lots of open source code. 

Web front end for vacation

The first project I started 5 years ago was the Web Frontend for Vacation Program.  This is a very simple web administration interface for those using the “vacation” program to set out of office. 

This project started several years ago and has been downloaded 500+ times. That would be 100 download a year or 10 per month since the release of the “final” code. 

I always asked myself: “Does anyone care?”  In 10 years, no one applauded, congratulated or send me a thank you.  That probably would tell much more about the code quality than the friendliness of people.  But yet.

Ymlp.Net

This other project I started earlier this year: YMLP.net (a .Net wrapper for the YMLP API).  YMLP is an abbreviation for YourMailingListProvider.  The name is self declaring, it’s a (cheap)mailing list provider, with an API.  The sample code is only available in PHP and I ported it to .Net (C#).

The project has been downloaded 57 times since January this year.  That would be about almost 10 per month.  Not bad in my opinion.  But even here, no one applauded, congratulated or send a small thank you.  And I am pretty sure the code works.  I use it regularly.

But for the few bugs we had in the code, not a single person reported something on the discussion board, issue tracker or send me an e-mail. No one send his improvements or patches to codeplex, to the forum or to me. 

This project is meant for developers.  It’s an API wrapper.  End users don’t care and won’t use it directly.  So you KNOW that there must have been made changes to the code.  That is what developers do. Furthermore, I know pretty sure their are improvements, the API changed recently and I haven’t had time to implement all new methods last few weeks. 

According to Ohloh this project would cost $ 47 157 to build it up from scratch.  (Which is overrated due to the used calculation method). But still, their are lots of hours put into this project.

Someone has put time (and money) in the project.  Someone created value.  But do you think someone cares? 

No one cares. 

Since when did open source means: “profit from free code and don’t show any gratitude back to the community”.

Asp.Net Debug (breakpoints) not working in VS2008

by Damiaan Peeters 14. December 2008 10:42

Problem

I set a breakpoint and my debugger is not stopping at the breakpoint.  Debug is configured in the Web.Config:

<compilation debug="true">
    <assemblies>

My assembly is compliled in Debug mode: debug - any cpu

Solution

The last thing to check is of cource the Project Properties. 

Go to the tab “Web”, just below Signing.
image

You will see at the bottom a section Debuggers.
image

Activate the ASP.NET checkbox and your breakpoints will halt your running code again.

Microsoft support can be found here for some common problems: INFO Common Error When you Debug ASP.Net Applications in Visual Studio .NET and especially here: PRB: Visual Studio .NET Debugger Does Not Stop on Breakpoints When You Debug ASP.NET Pages

Commonality - VS2008 Color Schemes

by Damiaan Peeters 21. February 2008 15:43

Ever wanted to change the VS2008 Color Schemes? 

Tomas Restrepo posted VS2008 Color Schemes .

Who.I.am

Certified Umbraco Master, Part of Umbraco Certified partner comm-it, .Net and Azure developer, seo lover. Magician in my spare time.

Month List