import PyPDF2
import pandas as pd
import re
# Ganti dengan nama file PDF Anda jika berbeda
pdf_file_path = 'ijazah_SMK.pdf'
extracted_data = []
try:
with open(pdf_file_path, 'rb') as file:
reader = [Link](file)
num_pages = len([Link])
print(f"Mulai mengekstrak data dari {num_pages} halaman...")
for i in range(num_pages):
page = [Link][i]
text = page.extract_text()
no_ijazah = None
nama_siswa = None
ttl = None
nisn = None
bidang_program_kompetensi_keahlian = None # Variabel tunggal untuk
menampung salah satu dari ketiganya
# Regex untuk Nomor Ijazah
ijazah_match = [Link](r'No\.\s*Ijazah:\s*(\d{15})', text,
[Link])
if ijazah_match:
no_ijazah = ijazah_match.group(1).strip()
else:
ijazah_match_alt = [Link](r'No\.\s*Ijazah:\s*(\d+\s*\d+)', text,
[Link])
if ijazah_match_alt:
no_ijazah = ijazah_match_alt.group(1).replace(" ", "").strip()
# Regex untuk Nama Siswa
nama_match = [Link](r'Dengan ini menyatakan bahwa:\s*\n\s*(.*?)\n',
text, [Link] | [Link])
if nama_match:
nama_siswa = nama_match.group(1).strip()
if "tempat, tanggal lahir" in nama_siswa:
nama_siswa = nama_siswa.split("tempat, tanggal lahir")
[0].strip()
if "Nomor Induk Siswa Nasional" in nama_siswa:
nama_siswa = nama_siswa.split("Nomor Induk Siswa Nasional")
[0].strip()
else:
nama_match_alt = [Link](r'(?<=Yang bertanda tangan di bawah ini
menyatakan bahwa:\s*\n)(.*?)(?=\nNomor Induk Siswa Nasional)', text, [Link]
| [Link])
if nama_match_alt:
nama_siswa = nama_match_alt.group(1).strip()
# Regex untuk Tempat, Tanggal Lahir
ttl_match = [Link](r'tempat,\s*tanggal\s*lahir:\s*(.*?)\n', text,
[Link])
if ttl_match:
ttl = ttl_match.group(1).strip()
# Regex untuk Nomor Induk Siswa Nasional (NISN)
nisn_match = [Link](r'Nomor Induk Siswa Nasional:\s*(\d{9,10})',
text, [Link])
if nisn_match:
nisn = nisn_match.group(1).strip()
# Regex untuk Kompetensi Keahlian, Konsentrasi Keahlian, Program
Keahlian, atau Bidang Keahlian
# Prioritaskan Kompetensi Keahlian terlebih dahulu
kompetensi_keahlian_match = [Link](r'Kompetensi Keahlian\s*:\
s*(.*?)\n', text, [Link])
if kompetensi_keahlian_match:
bidang_program_kompetensi_keahlian =
kompetensi_keahlian_match.group(1).strip()
else:
konsentrasi_keahlian_match = [Link](r'Konsentrasi Keahlian\s*:\
s*(.*?)\n', text, [Link])
if konsentrasi_keahlian_match:
bidang_program_kompetensi_keahlian =
konsentrasi_keahlian_match.group(1).strip()
else:
program_keahlian_match = [Link](r'Program Keahlian\s*:\
s*(.*?)\n', text, [Link])
if program_keahlian_match:
bidang_program_kompetensi_keahlian =
program_keahlian_match.group(1).strip()
else:
bidang_keahlian_match = [Link](r'Bidang Keahlian\s*:\
s*(.*?)\n', text, [Link])
if bidang_keahlian_match:
bidang_program_kompetensi_keahlian =
bidang_keahlian_match.group(1).strip()
# Hanya tambahkan data jika setidaknya Nomor Ijazah ditemukan
if no_ijazah or nama_siswa or nisn or ttl or
bidang_program_kompetensi_keahlian:
extracted_data.append({
'Halaman': i + 1,
'No. Ijazah': no_ijazah,
'Nama Siswa': nama_siswa,
'Tempat, tanggal lahir': ttl,
'Nomor Induk Siswa Nasional': nisn,
'Bidang/Program/Kompetensi Keahlian':
bidang_program_kompetensi_keahlian # Kolom baru
})
print(f"Total {len(extracted_data)} data berhasil diekstraksi.")
# Buat DataFrame dari data yang diekstrak
df = [Link](extracted_data)
# Simpan DataFrame ke file Excel
output_excel_file = 'data_ijazah_SMK.xlsx'
df.to_excel(output_excel_file, index=False)
print(f"Data lengkap berhasil disimpan ke '{output_excel_file}'")
except FileNotFoundError:
print(f"Error: File '{pdf_file_path}' tidak ditemukan. Pastikan nama file dan
lokasi sudah benar.")
except Exception as e:
print(f"Terjadi kesalahan: {e}")