Untuk kasus tertentu kita mungkin perlu untuk membuat sebuah dokumen misalnya word (docx) menggunakan PHP. Pada artikel ini kita akan mencoba membahas bagaimana membuat dokumen word dari template yang telah disediakan dengan menggunakan PHP.
Contoh kasus, kita perlu generate sebuah surat dalam format docx. Sebuah surat biasanya memiliki template tertentu, hanya beberapa konten saja yang bersifat dinamis. Karena itu, dibandingkan dengan generate semua konten untuk file ini menggunakan PHP, akan lebih tepat jika kita menyiapkan sebuah template yang kemudian kita replace beberapa konten sesuai dengan nilai yang diperlukan.
Untuk mengatasi kasus diatas, kita akan menggunakan library PHPWord untuk mereplace nilai-nilai tertentu yang didefinisikan pada template dokumen.
Install PHPWord
Sebelum menginstall library PHPWord, ada beberapa requirement yang harus kita penuhi. Pastikan requirement dibawah ini telah terinstal.
- PHP 5.3.3+
- XML Parser extension
- Zend\Escaper component
- Zend\Stdlib component
- Zip extension (optional, used to write OOXML and ODF)
- GD extension (optional, used to add images)
- XMLWriter extension (optional, used to write OOXML and ODF)
- XSL extension (optional, used to apply XSL style sheet to template )
- dompdf library (optional, used to write PDF)
Untuk install library PHPWord, gunakan perintah composer dibawah ini:
composer require phpoffice/phpword
Setelah berhasil menginstal library PHPWord, kita harus menyiapkan template dokumen yang akan kita gunakan sebagai template utama dalam generate surat.
Buat template word dengan format docx, kemudian buat key dengan format ${search_pattern}
, yang nantinya key ini akan di replace dengan value yang kita kirim dari PHP.

Pada contoh diatas, kita mendefinisikan beberapa search pattern, pattern ini akan kita gunakan sebagai array key di PHP yang nantinya akan di replace berdasarkan value yang diberikan.
Selanjutnya, buat sebuah file php misalnya kita beri nama index.php, kemudian tambahkan kode dibawah ini.
<?php
require 'vendor/autoload.php';
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('template.docx');
$templateProcessor->setValues([
'number' => '212/SKD/VII/2019',
'name' => 'Alfa',
'birthplace' => 'Bandung',
'birthdate' => '4 Mei 1991',
'gender' => 'Laki-Laki',
'religion' => 'Islam',
'address' => 'Jln. ABC no 12',
'date' => date('Y-m-d'),
]);
header("Content-Disposition: attachment; filename=template.docx");
$templateProcessor->saveAs('php://output');
Pada contoh diatas, kita memiliki beberapa array item yang kita definisikan dalam method setValues()
. Nilai-nilai inilah yang nantinya akan kita gunakan untuk mereplace pattern yang kita atur dalam template dokumen.
Search Pattern | Replacement Key |
${number} | number |
${birthplace} | birthplace |
${birthdate} | birthdate |
${gender} | gender |
${religion} | religion |
${address} | address |
${date} | date |
Dengan kata lain, untuk membuat dokumen word dari template, kita perlu mendefiniskan search pattern pada dokumen word dengan format ${pattern}
, dan pada PHP kita akan menjadikan pattern
sebagai array key.
Menyimpan File
Untuk kasus tertentu juga, kita perlu untuk menyimpan file hasil generate dari pada mendownload file secara langsung.
header("Content-Disposition: attachment; filename=template.docx");
$templateProcessor->saveAs('php://output');
Pada contoh kode diatas, kita akan langsung mendownload file hasil generate. Jika kita hanya perlu untuk menyimpan file tersebut, kita hanya perlu menghapus baris header
pada kode diatas, kemudian ganti php://output
menjadi path dimana kita akan menyimpan file ini.
People reacted to this story.
Show comments Hide commentsfor use this method, where i save the docx template ?
You can put the template anywhere in your project directory. Just make sure you use the correct path to the template.
Di atas datanya kan statis, bagaimana jika dinamis? bisa dicontohkan untuk laravel?
Tinggal ganti aja data statisnya, misal hasil query
cara agar bisa multidata untuk pattern yg sama?
Untuk lokasi file template.docx diletakan dimana ya?
$templateProcessor = new \\PhpOffice\\PhpWord\\TemplateProcessor(\’template.docx\’);
Saya coba letakan diluar folder vendor tidak terbaca, lalu saya coba letakan di dalam folder phpword/resources juga tidak terbaca. Mohon pencerahannya, terimakasih.
Sebenarnya bisa di simpan dimana saja, yang digunakan bisa full path dari templatenya.
Sederhanaya bisa di simpan di root project. Misal kalo document root dari projectnya ada di folder public, maka simpan template.docx di dalam folder public.
cara load template yg udah kita buat gimana bg? dan file konfigurasinya ditarok di controller atau view untuk kasus menggunakan framework. terima kasih sebelumnya bg
Cara load templatenya sama saja. Di contoller bisa menggunakan kode dibawah ini
bang bgmana carannya ambil data dari database untuk di replace ke form surat yang sudah dibuat?
apakah bisa di pakai di php native?
Tinggal ganti aja data statis yang di contoh menjadi variable hasil query dari database.
Di PHP native bisa.