Simple PDF to Image Converter with ASP.NET

Pada posting ini akan dicoba menerangkan langkah demi langkah untuk membuat converer file format PDF menjadi gambar. Hal ini kadang diperlukan pada aplikasi web dapat langsung menampilkan secara langsung file yang diupload (dalam kasus ini adalah file PDF) tanpa harus meinstall plugin. Maka dibuatlah converter yang mengubah file PDF yang diupload menjadi file PNG (image), sehingga nanti jika user ingin melihat file yang sudah diupload cukup disajikan file gambar hasil dari proses convert tersebut.

Untuk membuat converter sederhana ini digunakan library Magick.NET  (https://magick.codeplex.com/) dan juga diperlukan Ghostscript (http://www.ghostscript.com/download/gsdnld.html).

{Persiapan}

Langkah pertama, adalah menginstall Ghostscript dari link di atas pada komputer yang menjadi web server.

Langkah kedua, adalah meinstall library Magick.NET. Cara paling gampang untuk ini adalah via fitur Manage NuGet Package. Pada window Manage NuGet Package, masukkan magick pada kolom pencarian dan akan dapat dilihat daftar seperti berikut ini.

blog1

Pilih salah satu dari Magick.NET-Q16, kemudian klik tombol install.

{Pemrograman}

Selanjutnya adalah menyiapkan satu halaman Web Form seperti berikut ini.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ContohPdfConverter.aspx.cs" Inherits="Test_ContohPdfConverter" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload_FilePdf" runat="server" />
<asp:Button ID="Button_Convert" OnClick="Button_Convert_Click" runat="server" Text="PDF to JPG" />
</div>
</form>
</body>
</html>

Dan berikut ini adalah isi class code behind dari file aspx tersebut :

   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Web;

   5: using System.Web.UI;

   6: using System.Web.UI.WebControls;

   7:  

   8: using ImageMagick;

   9:  

  10: public partial class Test_ContohPdfConverter : System.Web.UI.Page

  11: {

  12:     protected void Page_Load(object sender, EventArgs e)

  13:     {

  14:  

  15:     }

  16:     protected void Button_Convert_Click(object sender, EventArgs e)

  17:     {

  18:         string folderpdf = "/Files/Pdf/";

  19:         string folderpng = "/Files/Png/";

  20:  

  21:         if (FileUpload_FilePdf.HasFile)

  22:         {

  23:             string filename = GetFileName(FileUpload_FilePdf.FileName);

  24:             string filepdf = Server.MapPath("~" + folderpdf) + filename;

  25:             string filepng = Server.MapPath("~" + folderpng) + filename + ".png";

  26:             FileUpload_FilePdf.SaveAs(filepdf);

  27:  

  28:             MagickReadSettings settings = new MagickReadSettings();

  29:             settings.Density = new MagickGeometry(100, 100);

  30:  

  31:             using (MagickImageCollection images = new MagickImageCollection())

  32:             {

  33:                 images.Read(filepdf, settings);

  34:                 MagickImage horizontal = images.AppendHorizontally();

  35:                 horizontal.Write(filepng);

  36:             }

  37:         }

  38:     }

  39:  

  40:     public static string GetFileName(string filename)

  41:     {

  42:         string prefixname = String.Empty;

  43:  

  44:         prefixname = DateTime.Now.ToString("yyyyMMdd-HHmmss-") + DateTime.Now.Millisecond.ToString();

  45:         filename = prefixname + "-" + filename.Replace(" ", "");

  46:  

  47:         return filename;

  48:     }

  49: }

Untuk menggunakan library Magick.NET maka pada kode perlu ditambahkan baris seperti pada baris ke-8.

Pada kode di atas akan mempunyai alur kerja seperti berikut :

  • File PDF akan diupload ke folder ~/Files/Pdf/ yang ada pada root folder dari aplikasi web. Nama file yang diupload akan disesuaikan dengan cara memanggil method GetFileName, dimana format nama file akan ditambahkan time stamp sebagai prefix.
  • File image akan disimpan dengan format PNG yang akan disimpan pada folder ~/Files/Png/ dengan nama sesuai dengan nama file PDF yang diupload dengan ditampkan “.png” di belakangnya.  Sehingga jika nama file pdf yang telah diupload adalah 20140321-122246-882-garuda-bjm-sby-20140329.pdf maka nama file png yang akan disimpan adalah 20140321-122246-882-garuda-bjm-sby-20140329.pdf.png.
  • Kemudian setelah file pdf sukses disimpan dilanjutkan dengan proses konversi dari PDF ke PNG dengan cara seperti yang dapat dilihat pada kode pada baris ke-28 sampai ke-38.

Pada baris ke-28 dan ke-29 adalah untuk menentukan setting dari hasil yang diinginkan, salah satunya adalah menentukan kualitas dari output yang diinginkan. Semakin tinggi angka density tersebut maka semakin besar dimensi image (pixel widthxheight) yang dihasilkan. Kemudian dengan class MagickImageCollection akan dilakukan proses membaca file PDF seperti yang terlihat pada baris ke-33.

Sedangkan pada baris ke-34 ditentukan bagaimana format dari output yang dihasilkan, pada contoh tersebut digunakan method AppendHorizontally yang nanti akan menghasilkan hasil yang menyamping. Artinya jika file PDF terdiri atas 3 halaman, ketiga halaman tersebut akan dibuat bersusun ke samping dari kiri ke kanan pada gambar. Jika ingin mendapatkan hasil dimana ketiga file itu tersusun dari atas ke bawah maka baris ke-34 tersebut dapat diganti menjadi seperti berikut :

   1: using (MagickImageCollection images = new MagickImageCollection())

   2: {

   3:     images.Read(filepdf, settings);

   4:     MagickImage horizontal = images.AppendVertically();

   5:     horizontal.Write(filepng);

   6: }

Dan yang terakhir adalah menulis hasil proses baca tadi dengan ke file seperti yang dapat dilihat pada baris ke-5 di atas.

Selamat mencoba.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.