DEV Community

Eko Priyanto
Eko Priyanto

Posted on

Generate SK massal dengan template simpan massal ke ZIP

Image description

Begini kira-kira Generate SK massal dengan template simpan massal ke ZIP

  1. Instalasi PHPWord Jika belum terpasang, install PHPWord dengan Composer:
composer require phpoffice/phpword
Enter fullscreen mode Exit fullscreen mode
  1. Script PHP untuk Generate dan ZIP Buat file generate_sk_massal.php dengan isi berikut:
<?php
require 'vendor/autoload.php'; // Jika menggunakan Composer

use PhpOffice\PhpWord\TemplateProcessor;
use ZipArchive;

// Data pegawai (bisa dari database)
$dataPegawai = [
    ['nama' => 'Budi Santoso', 'nip' => '123456789', 'jabatan' => 'Analis Kepegawaian', 'alamat' => 'Jl. Merdeka No. 45'],
    ['nama' => 'Siti Rahmawati', 'nip' => '987654321', 'jabatan' => 'Kasubag Kepegawaian', 'alamat' => 'Jl. Diponegoro No. 10'],
    ['nama' => 'Joko Priyanto', 'nip' => '112233445', 'jabatan' => 'Staff Administrasi', 'alamat' => 'Jl. Sudirman No. 20'],
];

// Lokasi template DOCX
$templatePath = 'templates/template.docx';

// Folder sementara untuk menyimpan SK sebelum dikompresi
$tempDir = 'temp_sk';
if (!file_exists($tempDir)) {
    mkdir($tempDir, 0777, true);
}

// Buat file DOCX untuk setiap pegawai
$files = [];
foreach ($dataPegawai as $pegawai) {
    $fileName = $tempDir . "/SK_{$pegawai['nip']}.docx";

    $templateProcessor = new TemplateProcessor($templatePath);
    foreach ($pegawai as $key => $value) {
        $templateProcessor->setValue($key, $value);
    }

    $templateProcessor->saveAs($fileName);
    $files[] = $fileName;
}

// Buat file ZIP
$zipFile = 'sk_massal.zip';
$zip = new ZipArchive();
if ($zip->open($zipFile, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
    foreach ($files as $file) {
        $zip->addFile($file, basename($file));
    }
    $zip->close();
}

// Hapus file DOCX sementara
foreach ($files as $file) {
    unlink($file);
}
rmdir($tempDir);

// Berikan file ZIP untuk diunduh
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="' . $zipFile . '"');
header('Content-Length: ' . filesize($zipFile));
readfile($zipFile);

// Hapus file ZIP setelah diunduh
unlink($zipFile);
exit;

Enter fullscreen mode Exit fullscreen mode
  1. Cara Menggunakan
  • Pastikan ada file template template.docx di folder templates/.
  • Jalankan script di browser
http://localhost/generate_sk_massal.php

Enter fullscreen mode Exit fullscreen mode
  • Hasilnya: File ZIP akan terunduh, berisi banyak SK dalam format DOCX.

Penjelasan Kode

  • Looping $dataPegawai: Membuat SK dari template untuk setiap pegawai.
  • saveAs($fileName): Menyimpan setiap SK ke folder temp_sk/.
  • ZipArchive: Mengompresi semua file DOCX ke dalam file ZIP.
  • header(): Mengirim file ZIP untuk diunduh oleh pengguna.
  • Pembersihan otomatis: Menghapus file DOCX sementara dan ZIP setelah diunduh.

💡 Bisa dikembangkan:

  • Ambil data pegawai dari database.
  • Tambahkan nomor SK otomatis.
  • Gunakan format PDF jika diperlukan.

Top comments (0)