Mengubah Tabel PDF ke Excel dengan Python

Mengubah Tabel PDF ke Excel dengan Python – Awalnya adalah keresahan pribadi ketika balik dari kuliah. Dulu itu, reviu RKA-K/L masih pakai aplikasi yang username dan password-nya DIPA. Saya bisa dengan mudah mengkonversi ADK ke format Excel dan dari situ saya bisa melalukan pekerjaan dengan mudah. Saya ada pengalaman cukup buruk soal itu, pernah dituding salah tapi tertolong oleh data bahwa pada proses reviu RKA-K/L saya diberikan data yang berbeda.

Blog secreet: Aplikasi RKAKL 2015
Aplikasi RKA-K/L zaman Pujangga Baru

Begitu balik dan aplikasinya jadi SAKTI, malah adanya cuma PDF. Saya lalu mengalami kesusahan karena note di PDF itu bagaimanapun sulit untuk direkap semudah pakai Excel dengan berbagai fiturnya.

Cukup Satu Aplikasi SAKTI (Sistem Aplikasi Keuangan Tingkat Instansi)

Saya kemudian mencari-cari berbagai kombinasi. Pada akhirnya saya mencampurkan converter free yang ada di internet dengan teknik yang akan saya kisahkan pada konten ini. Sekadar ingin memudahkan diri. Kebetulan, pas kuliah kemarin sempat mempaparkan diri pada Python walaupun kalau cari coding selalu dari internet. Heuheu.

Sesuai dengan sumbernya, kode-kode yang digunakan memanfaatkan Google Colab. Saya juga punya Jupyter Notebook tapi sudah dicoba ke situ, script ini gagal. Hehe.

Mari kita mulai…

Intinya, library yang digunakan adalah Tabula. Dengan Tabula, tabel di dalam file PDF akan dikonversi ke Pandas Dataframes. Nah, Tabula ini bukan bagian dari library Google Colab, jadi kita perlu masukkan dulu.

!pip install tabula-py

Ketika Tabula sudah ter-install, maka kita dapat meng-import 2 library yang juga kita butuhkan:

import tabula
import pandas as pd

Sebagai gambaran, saya gunakan hasil penerimaan CPNS dari Badan Informasi Geospasial (BIG). Kan lagi musim tuh tes CPNS dan sebenarnya data-datanya gurih untuk diolah bolak-balik. Karena pakai Google Colab, data yang sudah saya unduh tadi, kemudian saya unggah ke Google Colab tepatnya di logo folder sebelah kiri layar.

dfs = tabula.read_pdf("/content/BIG.pdf", multiple_tables=True, pages="all", encoding="utf-8")

Kalau diterjemahkan, bagian awal tentu saja nama file-nya. Untuk command selanjutnya adalah kita hanya memproses tabel yang dikenali di dalam PDF. True berarti kita mau semua tabel di dalam file akan diproses. Sedangkan untuk “UTF-8” digunakan karena dia adalah tipe encoding dari Pandas, library yang kita gunakan untuk memproses data.

Terakhir, kita menyimpan kode sebagai instance “dfs” sehingga kita dapat melakukan manipluasi lebih lanjut.

dfs[0]

Sesudah itu, kita perlu menambahkan library lain yakni Xlsxwriter.

!pip instanll Xlsxwriter
import xlsxwriter

Nah, dengan library tersebut, kita buat file Excel-nya:

writer = pd.ExcelWriter('BIG.xlsx',engine='xlsxwriter')

Writer sendiri memungkinkan kita untuk menyimpan setiap tabel atau dataframe sebagai tab sendiri dalam file Excel. Kadang jadi kosong ya namanya juga PDF, salah satu script yang bisa digunakan untuk mengantisipasinya adalah:

X = 0

for df in dfs:
if len (df) == 0
print("Empty Dataframe")

else:
df.to_excel(writer, sheet_name=f"sheet {X}")
print(f"Saved Sheet{X}")
X = X + 1

Script di atas kemudian dipungkasi dengan perintah menyimpan:

writer.save()

Kita bisa refresh file di sebelah kiri layar untuk mendapati file hasil export-nya muncul.

Sejujurnya masih agak berantakan karena 1 halaman jadi 1 sheet. Ini PR lagi dalam merapikannya, tapi hasil yang diperoleh lumayan untuk melengkapi hasil dari converter. Converter ini ada masalah lain karena biasanya kalau mau convert banyak halaman agak sulit dan harus berbayar, sementara saya kan miskin.

Kira-kira demikian, lebih lengkapnya bisa disimak di video YouTube berikut ya:

Ciao!

Sumber kode DISINI.

Liburan Pegal di Ancol

“Pa, Eto mau ke beach. Naik airplane ya…”

Demikian pesan bos besar di rumah. Kombinasi video YouTube yang memperlihatkan sejumlah anak bebas main di pantai plus beberapa kali bapaknya dinas naik pesawat membuat dia memberikan pesan itu. Pesan yang sulit diwujudkan, selain karena miskin, tapi juga karena lagi pandemi. Saya saja berusaha supaya tidak berangkat dinas karena takut ketularan COVID-19 di kota lain, lah masak bawa anak liburan?

Aslinya, saya jelas pengen bawa anak liburan. Kemarin di Bali kan saya menginap di Hotel Bali Mandira, pinggir Legian banget. Hotelnya juga asyik lah kalau bawa anak. Dan memang saya ingin banget bawa anak jalan-jalan. Tapi lagi-lagi, selain COVID-19 ada faktor kemiskinan yang membuatnya sulit terwujud~

Dan karena kita di Tangerang Selatan, maka jadilah kita ke beach yang paling masuk akal: Ancol. Kristof sudah pernah ke Ancol pada usia 2 tahun dan sekarang berarti dia kesini pada usia 4 tahun. Dulu pas 2 tahun sudah direncanakan bakal bawa ke Singapur lah, ke mana lah, ujung-ujungnya demi keamanan, selama 2 tahun dia malah di rumah…

Dulu kami pernah ke Ancol, tapi menginap di luar kawasan. Nah ini pikirnya kan biar liburannya asyik, jadi coba menginap di dalam kawasan. Kami menginap di salah satu hotel yang ada di dalam kawasan Ancol, tepatnya yang mefet banget sama laut dan dahulu kala pernah kondang dengan nama artis Lidia Pratiwi. Niatnya kan biar urusan ke pantainya gampang.

Sayangnya, gampang itu kalau kita bawa mobil sendiri.

Sobat misqueen kayak saya yang ke Ancolnya saja naik Blue Bird dengan kartu kredit, tentu nggak punya transportasi apapun di dalam selain kaki dan sedikit uang untuk sewa sepeda listrik. Tapi ya sudahlah, dinikmati saja karena niatnya kan liburan.

Secara umum, sesudah datang dan check in kami menuju ke Faunaland, suatu kebun binatang kecil-kecilan di dalam kawasan Ancol, tepatnya di tengah Allianz Ecopark. Kami naik taxol dari hotel ke Allianz Ecopark tersebut. Uniknya, itu posisi si taxol sudah di dalam dan saya tetap disuruh bayar 25 ribu. Padahal, ketika di masuk kan dia sudah dapat tiket keluar ya.

Tapi ya sudah. Gapapa.

Dari Faunaland, tampaknya anak saya ngebet benar pengen ke pantai. Walhasil, dengan berjalan kaki saya membawa dia ke Pantai Indah yang notabene paling dekat dengan Faunaland. Pantainya cukup ramai dengan tali melintang di area laut tanda tidak boleh berenang. Jadi memang hanya celup-celup sama main pasir. Anak saya sebagai anak prokes langsung keder begitu melihat anak-anak yang cukup ramai.

“Pa, banyak anak-anak…”

Dari Pantai Indah, kami kembali ke hotel untuk main pasir di depan kamar saja. Kami naik taksi. Jadi, ada sebuah taksi yang muter-muter Ancol pada Sabtu-Minggu untuk mencari orang-orang tidak berpunya seperti kami ini. Pas nganter kami, bapaknya malah curhat. Sedih memang. Benar bahwa di Ancol ada bus Wara Wiri, tetapi keramaian dan rutenya tidak cukup visibel untuk orang-orang seperti kami.

Kami memang berencana akan main pasir baru pada pagi hari berikutnya, sebelum pulang. Arahnya tentu saja beach pool yang dari proporsi pasirnya paling banyak. Pilihan kami kemudian adalah naik sepeda listrik yang disewakan di hotel dengan harga 100 ribu untuk 2 jam. Jadi dua sepeda ya 200 ribu. Dengan jarak 1 kilometer, menggenjotnya lumayan juga. Tapi namanya sepeda listrik kan kayak naik sepeda motor.

Dan sisi baiknya adalah ternyata anak saya sudah cukup seimbang sehingga bisa pegangan dengan baik dan benar di boncengan.

Kami main pasir dalam suasana yang gloomy dengan sedikit mendung dan beberapa tetes air hujan. Walau demikian, dalam durasi 2 jam tidak ada hujan yang terjadi sehingga keinginan Kristof untuk bisa bermain pasir di pantai setidaknya bisa terwujud dengan keterbatasan seperti tali, maupun kapasitas dan tentunya minim ombak. Memang lain kali saya sangat ini dia bisa menikmati pantai-pantai cantik yang pernah saya datangi, mulai di Padang, Bali, Kupang, Nias, hingga di Palu.

Memang baru dua kali dia ke pantai dan dua-duanya ke beach pool. Sebagai orang tua, sebenarnya ada keinginan dalam diri saya untuk mengajak dia. Cuma dulu takut saja dia tidak ingat. Jadi mau mencari umur yang kira-kira dia bakal ingat sampai kapan-kapan dan sepertinya ini sudah umurnya.

Kapan-kapan ya, Nak.