Rabu, 30 November 2011

OpenXML Word #2 :: Membuat dokumen Word sederhana dengan OpenXML

Hello guys,
Untuk membuat Word dengan Open XML, sebelumnya instal-lah OpenXML SDK ny terlebih dahulu..

Bagi yg ingin menginstall OpenXML SDK ini, dapat di dapat di :
\\storage\binus\Syahdan\IT\upload\OpenXML\OpenXMLSDKv2.msi
atau jika ternyata installer yg saya upload ternyata sudah dihapus, dapat di download di sini :
http://www.microsoft.com/download/en/details.aspx?id=5124

Setelah terinstall, kopi DocumentFormat.OpenXml.dll yg berada di lokasi file tempat install :
C:\Program Files\Open XML SDK\V2.0\lib\
atau
[path install]\Open XML SDK\V2.0\lib\

dan Paste lah dll tersebut ke dalam Folder Bin aplikasi anda..

Setelah itu buka aplikasi anda,
dan klik kanan Reference, untuk menambahkan Reference baru..
Browse lah k file DocumentFormat.OpenXml.dll tersebut..
Jangan lupa menambahkan WindowsBase.dll



Buat lah sebuah tombol di aplikasi anda..
Lalu di fungsi OnClick nya, kita masukkan kodingan kita

Pertama kita siapkan nama file yg akan dibuat, beserta Path tempat file akan disimpan terlebih dahulu..
//Masukkan Path folder yang ingin di-save & nama File
            String SaveFolderPath = Server.MapPath("~") + "Temp\\";
String namaFile = "WordTest.docx";


Lalu kita buat MainDocument nya..
WordprocessingDocument document = 
                WordprocessingDocument.Create(SaveFolderPath + namaFile, WordprocessingDocumentType.Document);
            MainDocumentPart mainDocumentPart = document.AddMainDocumentPart();
            mainDocumentPart.Document = new Document();
sama halnya klo di WordProcessingML nya, itu kita buat yg bagian ini :
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
.
.
.
</w:wordDocument>


Lalu kita buat bagian Body nya..
Body documentBody = new Body();
sama halnya klo di WordProcessingML nya, itu kita buat yg bagian ini :
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:body>
.
.
.
    </w:body>
</w:wordDocument>


Masih ingatkan? di OpenXML Word #1, saya sudah menjelaskan mengenai Paragraph, Run, & Text..
Jika kita ingin membuat dan memasukkan Text "Hello World", Text tersebut harus dimasukkan ke dalam Run.. Dan Run tersebut harus dimasukkan ke dalam Paragraph..

Jadi seperti ini..
<w:p>
    <w:r>
        <w:t>Hello, World!</w:t>
    </w:r>
</w:p>

Mari kita masukkan ke dalam kodingan, jadinya seperti ini :
Paragraph paragraph1 = new Paragraph();
            Run run1 = new Run();
            Text text1 = new Text { Text = "Hello, World!" };
            run1.Append(text1);
            paragraph1.Append(run1);
sama halnya klo di WordProcessingML nya, itu kita buat yg bagian ini :
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:body>
        <w:p>
            <w:r>
                <w:t>Hello, World.</w:t>
            </w:r>
        </w:p>
    </w:body>
</w:wordDocument>

Lalu kita harus meng-'append' Text ke dalam Run.. dan meng-'append' Run ke dalam Paragraph..
Seperti di bawah ini :
run1.Append(text1);
            paragraph1.Append(run1);


Terakhir, kita men-'append' Paragraph tersebut ke dalam Body yg telah kita buat tadi.. Dan kita Close..
Seperti di bawah ini :
documentBody.Append(paragraph1);
            mainDocumentPart.Document.Append(documentBody);
            document.MainDocumentPart.Document.Save();
            document.Close();
            document.Dispose();

OpenXML akan langsung secara otomatis men-save file yg kita buat, apabila kita sudah men-close Document nya..


Hasil keseluruhan tampak seperti ini :

protected void btnPrint_Click(object sender, EventArgs e)
{
            //Masukkan Path folder yang ingin di-save & nama File
            String SaveFolderPath = Server.MapPath("~") + "Temp\\";
            String namaFile = "WordTest.docx";
   
            //Kita buat Document Word nya dengan OpenXML
            WordprocessingDocument document = 
                WordprocessingDocument.Create(SaveFolderPath + namaFile, WordprocessingDocumentType.Document);
            MainDocumentPart mainDocumentPart = document.AddMainDocumentPart();
            mainDocumentPart.Document = new Document();

            Body documentBody = new Body();
            Paragraph paragraph1 = new Paragraph();
            Run run1 = new Run();
            Text text1 = new Text { Text = "Hello, World!" };
            run1.Append(text1);
            paragraph1.Append(run1);
            documentBody.Append(paragraph1);

            mainDocumentPart.Document.Append(documentBody);
            document.MainDocumentPart.Document.Save();
            document.Close();
            document.Dispose();

            //Memprint nya keluar
            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=" + namaFile);
            Response.Charset = "";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
            Response.WriteFile(SaveFolderPath + namaFile);
            Response.End();
(Perhatikan
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
MIME di atas adalah tipe file .docx..
Gunakan MIME yg berbeda untuk men-save file .doc, atau excel atau PowerPoint..)

Selamat mencoba.. ^^ Berikut ScreenShot nya..


OpenXML Word #1 :: Mari mengenal OpenXML :: WordProcessingML

Haloooo.. bagi yg sering menggunakan Interop Word untuk meng-generate Word dari aplikasi web..
Ketahuilah fakta ini, bahwa :
Interop itu tidak cocok digunakan di aplikasi berbasis server.. Interop cocok digunakan untuk aplikasi desktop atau non-server...
Lagipula, untuk menggunakan Interop, di server harus diinstall Microsoft Office Word terlebih dahulu..

Nah.. mari kita belajar menggunakan OpenXML.. selain ringan.. (bisa men-generate ratusan page dalam beberapa detik saja.. Sudah pernah ditest), Server tidak perlu meng-install Ms Office Word yg kadang makan beratus2 Mb.. OpenXML cukup membutuhkan SDK saja..

Bagi yg ingin menginstall OpenXML SDK ini, dapat di dapat di :
\\storage\binus\Syahdan\IT\upload\OpenXML\OpenXMLSDKv2.msi
atau jika ternyata installer yg saya upload ternyata sudah dihapus, dapat di download di sini :
http://www.microsoft.com/download/en/details.aspx?id=5124
(cukup install yg SDK saja)

Sekarang saya akan jelaskan sedikit tentang WordProcessingML.. (Bagi yg udah kebelet pengen membuat dokumen Word dengan OpenXML, anda dapat langsung menuju artikel : "OpenXML Word #2")

WordProcessingML, itu adalah XML yg digunakan oleh Word untuk merangkai dokumennya..
Untuk melihat secara langsung seperti apa XML Word itu? Anda dapat mencoba melihat tutorial yg ditulis oleh Rendy ini :
http://personal.binus.edu/personal/rkristyadi/Blog/Lists/Posts/Post.aspx?ID=6

Yang terpenting adalah Tag utama nya ini :


<?xml version="1.0"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:body>
</w:body>
</w:wordDocument>


dan jika kita ingin menambahkan sebuah Teks..
Maka kita harus memasukkan Teks tersebut ke dalam Run..
Dan Run tersebut harud dimasukkan ke sebuah Paragraph..

Jadi jika kita ingin membuat sebuah Dokumen Word yg berisi Hello World, maka kita harus menambahkan seperti ini :

<?xml version="1.0"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:body>
        <w:p>
            <w:r>
                <w:t>Hello, World.</w:t>
            </w:r>
        </w:p>
    </w:body>
</w:wordDocument>

Berikutnya kita akan belajar membuat dokumen Word..