Berikut merupakan sambungan dari postingan sebelumnya mengenai belajar C#, aku tuliskan tentang project Membuat mail merger online dan PDF converter dengan pilihan datasource XML ataupun EXCEL.
Ini merupakan project freelance yang saya kerjakan untuk scriptlancer.com
Membuat mail merge yang saya lakukan tidak dengan cara otomatisasi seperti biasa
sebab hal ini tidak memungkinkan untuk dokument template dalam bentuk HTML
maka saya menggunakan cara string replacement dan juga API text replacement
di di MSWORD dengan pemanggilan COM prosedure.
Membuat PDF dengan PDFCreator hasilnya lebih bagus karena bisa membuat PDF dari
berbagai macam dokument dengan mengeprintnya dengan PRogram asli misal MSWOrd
excel Image creator dan lain-lainnya, lagi pula tersedia conversi printer
ke format Image dan texts dan hebatnya lagi komponent ini opensource dan gratis.
Bila menggunakan PDF creator yang lain seperti itexts PDF tidak bisa untuk mengkonversi
sembarang dokument yang sudah ada
(menkonversinya) PDf creator seperti ini hanya cocok untuk pembuatan PDF dinamis yang baru
(belum ada) , misalnya online PDF creator.
Pada waktu awal, saya gagal dalam step printer, 1x print selalu membuat hang dan
harus restart server dan kill PDF Printer serta MSWord yang ada di background
sebab itu membuat Hang dikarenakan karena Thread yang dibuat untuk mendeteksi agar
prosess wait sampai selesai sebelum mencetak berikutnya gagal dan terus menerus looping.
PRoses wait ini diperlukan sebab jika tanpa wait dan menunggu status printer ready
maka akan terjadi overload buffer memory dan pencetakan PDF gagal.
Kesulitan ini saya jumpai dengan pada waktu melakukan wait sampai prosedur handle
printer ready siap yang saya pisahkan kelasnya ternyata prosedur tersebut tidak dipanggil
oleh parent kelas pemanggil.
Oh iya script ini dilengkapi untuk melakukan compresing output beberapa file ke dalam
zip menggunakan library [ICSharpCode.SharpZipLib.Zip] dalam folderacak
ke dalam 1 zip file yang siap untuk didownload, dan juga dilengkapi dengan option file
downloader file zip tersebut.
Setelah melakukan beberapa kali percobaan:
1. menunggu status wait dengan while(wordapp.BackgroundPrintingStatus!=0){ Thread.sleep(100); }
--> hasilnya masih tidak berhasil karena ternyata status tersebut hanya untuk proses pencetakan
msword yang dikirimkan ke PDFPrinter.
Sedang status PDFPrinter untuk mengeprint sampai dengan selesai ternyata harus menggunakan
contoh seperti pada COM object yang disertakan dalam contoh penggunaan PDF printer
yaitu event On_printer ready , maka status kita set menjadi ready.
2. berasumsi dengan modal tersebut kemudian saya berhasil mencetak dokument PDF dengan tanpa menimbulkan
overload lagi pada PDF printer maupun pada prosess background dari Server dan MSWord.
/***
.......berikut potongan coding saya ..............
......................
***/
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.IO.Compression;
using System.Xml;
using System.Xml.XPath;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Reflection;
using Microsoft.Office;
using Microsoft.Office.Core;
using System.Runtime.InteropServices;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Diagnostics;
using ICSharpCode.SharpZipLib.Zip;
class RunProg{
public RunProg()
{
}
public void RunExecutable(string executable, string arguments)
{
ProcessStartInfo starter = new ProcessStartInfo(executable, arguments);
starter.CreateNoWindow = true;
starter.RedirectStandardOutput = true;
starter.UseShellExecute = false;
Process process = new Process();
process.StartInfo = starter;
process.Start();
StringBuilder buffer = new StringBuilder();
using (StreamReader reader = process.StandardOutput)
{
string line = reader.ReadLine();
while (line != null)
{
buffer.Append(line);
buffer.Append(Environment.NewLine);
line = reader.ReadLine();
Thread.Sleep(100);
}
}
if (process.ExitCode != 0)
{
throw new Exception(string.Format(@"""{0}"" exited with ExitCode {1}. Output: {2}", executable, process.ExitCode, buffer.ToString()));
}
}
}
/// Upload handler for uploading files.
public class Upload : IHttpHandler
{
public Upload()
{
}
#region IHttpHandler Members
private HttpPostedFile htmltemplate;
private string uploadpath;
private string datasourcefile;
private string datasourcetype;
private string basepath;
private DataSet sdataconf;
private DataSet sdataset;
private string outputtype;
private string savein;
private string loopingtags,starttag, closetag, docinput;
private bool debug;
public bool IsReusable
{
get { return true; }
}
}
/***
.....................................sorry cut in here................
..........................................................................
***/
Untuk coding lengkap akan di publish dan dimuat di Ilmukomputer.com setelah artikel saya selesai diedit, mohon tunggu ya temen-temen, terutama yang mau segera belajar C#
Referensi:
0. GNU PDFCreator, pdf printer (download)
1. code project, reading excel datasheet.
2. code project, reading excel dengan datasource.
3. code project, reading xml dengan dataset.
4. code project, simple treading.
5. code project, run background process asp.
6. Programmtically Convert Documents to PDFs the Easy Way
7. perancis, pdf creator
http://www.vbfrance.com/infomsg_PDFCREATOR-WORD-MSGBOX_911817.aspx#58. itext PDF creator
9. icharp ziplib