Sizlerinde bildiği üzere, internette çeşitli konularda makale yayınlayan veya üyelerine makale yazma imkanı sunan pek çok web sitesi mevcut. Fakat internet üzerinde resimli bir doküman hazırlamak herhangi bir kelime işlemci programında hazırlamaktan çok daha zahmetlidir.
Dolayısıyla biz üyelerimize mümkün olduğunca kolay bir ara yüz sunmalıyız ki yazarlar makale yazmak için bizi tercih etsin.
Üyelerimiz word dosyasına makalesini yazıp hazırlasa resimlerini dilediği gibi tutup rahat rahat yerleştirse, büyültse küçültse, başlıkların paragrafların fontlarını rahat rahat ayarlasa… sonrada bizim ara yüzümüze girip o word dosyasını upload etse, bizde o word dosyasını çabucak html formatında kaydedip makaleyi yayına hazır hale getirsek nasıl olur?
Kimse böyle bir uygulamaya burun kıvırmaz herhalde. Hemen uygulamaya koyulalım.
Öncelikle bir web form oluşturalım ve wordToHtml.aspx ismiyle kaydedelim. Daha sonra uygulamamıza Microsoft Word 12.0 Object Library referansını ekleyelim ekliyoruz
Şimdi sayfamıza Bir FileUpload ve bir Button koyalım.
Butonumuza çift tıklayarak click kodumuza geçelim ve kodlarımızı yazalım.
using System;
using Microsoft.Office.Interop.Word;
using System.IO;
using System.Text;
public partial class _Word : System.Web.UI.Page
{
protected void BtnWord_Click(object sender, EventArgs e)
{
//dosya yoksa metodu kes
if (!FU1.HasFile)
return;
//dosya word dosyası değilse metodu kes
if (FU1.PostedFile.ContentType != "application/msword" && FU1.PostedFile.ContentType != "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
return;
//word dosyasıının kaydedileceği yer
object wordKayitYeri = Server.MapPath("~/temp.doc");
//html dosyasının kaydedileceği yer
object htmlKayitYeri = Server.MapPath("~/temp.htm");
//word dosyasını keydediyoruz
FU1.SaveAs(wordKayitYeri.ToString());
//word uygulaması oluşturuyoruz
ApplicationClass wordApp = new ApplicationClass();
//html formatında kaydetmesi için
object kayitFormati = WdSaveFormat.wdFormatFilteredHTML;
object missing = System.Reflection.Missing.Value;
string htmlIcerik = "";
try
{
wordApp.Documents.Open(ref wordKayitYeri, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
Document belge = wordApp.ActiveDocument;
//burada da html olarak kaydediyoruz
belge.SaveAs(ref htmlKayitYeri, ref kayitFormati, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
wordApp.Quit(ref missing, ref missing, ref missing);
//şimdi de html olarak kaydedilen dosyayı alıp içeriğini okuyoruz ve string değişkene aktariyoruz.
StreamReader sr = new StreamReader(htmlKayitYeri.ToString(), Encoding.Default);
htmlIcerik = sr.ReadToEnd();
sr.Close();
}
catch
{
wordApp.Quit(ref missing, ref missing, ref missing);
return;
}
}
}
Biz burada word dosyasını hml’ye dönüştürdük ve html dosyasının içeriğini htmlIcerik isimli değişkene aktardık. Artık bu içeriğe istediğimiz yapabiliriz. Örneğin html içeriğinin body tagları arasında kalan kısmı alıp diğer kısımlarını atabiliriz. Daha sonra lüzumsuz css class isimlerini temizleyebiliriz. Ve sonuçta elimizde kalan veriyi veritabanımıza kaydedebiliriz.