1. PHP

PHP – Membuat dokumen word dari template

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.

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.

Template

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 PatternReplacement 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 comments
Comments to: PHP – Membuat dokumen word dari template
  • March 11, 2020

    for use this method, where i save the docx template ?

    Reply
    • March 11, 2020

      You can put the template anywhere in your project directory. Just make sure you use the correct path to the template.

      $templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('/path/to/template.docx');
      
      Reply
  • August 13, 2020

    Di atas datanya kan statis, bagaimana jika dinamis? bisa dicontohkan untuk laravel?

    Reply
    • August 26, 2020

      Tinggal ganti aja data statisnya, misal hasil query

      $user = User::where('email', 'test@domain.com)->first()
      
      $templateProcessor->setValues([
          'name' => $user->name,
      ])
      
      Reply
  • December 23, 2020

    cara agar bisa multidata untuk pattern yg sama?

    Reply
  • January 15, 2021

    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.

    Reply
    • March 25, 2021

      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.

      Reply
  • March 25, 2021

    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

    Reply
    • March 25, 2021

      Cara load templatenya sama saja. Di contoller bisa menggunakan kode dibawah ini

      $templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('/path/to/template.docx');
      
      Reply
  • February 7, 2022

    bang bgmana carannya ambil data dari database untuk di replace ke form surat yang sudah dibuat?
    apakah bisa di pakai di php native?

    Reply
    • February 8, 2022

      Tinggal ganti aja data statis yang di contoh menjadi variable hasil query dari database.
      Di PHP native bisa.

      Reply

Write a response

Your email address will not be published. Required fields are marked *

Attach images - Only PNG, JPG, JPEG and GIF are supported.