Advertisement
  1. Code
  2. Python

Bagaimana Berkerja Dengan Dokumen PDF Menggunakan Python

Scroll to top
Read Time: 5 min

() translation by (you can also view the original English article)

Saya sangat mengagumi file Portable Document Format (PDF). Saya mengingat hari dimana file ini menyelesaikan permasalahan formatting ketika berbagi file berdasarkan beberapa perbedaan dalam versi Word, atau untuk alasan lainnya.

Kita mengutamakan pembicaraan tentang Python di sini, bukan? Dan kita tertarik dalam mengaitkan itu pada berkerja dengan dokumen PDF. Nah, kamu mungkin mengatakan bahwa itu begitu sederhana, khususnya jika kamu telah menggunakan Python dengan file teks (txt) sebelumnya. Namun, itu sedikit berbeda di sini. Dokumen PDF merupakan file biner dan lebih kompleks daripada sekedar file plaintext, khususnya sejak mereka berisi jenis font, warna yang berbeda, dll.

Itu tidak berarti bahwa sulit untuk bekerja dengan dokumen PDF menggunakan Python, itu cukup sederhana, dan menggunakan module eksternal menyelesaikan permasalahan itu.

PyPDF2

Seperti yang kita sebutkan di atas, penggunaan module eksternal akan menjadi kuncinya. Module yang akan kita gunakan dalam tutorial ini adalah PyPDF2. Karena itu merupakan module eksternal, langkah normal pertama yang harus kita ambil adalah menginstal module itu. Untuk itu, kita akan menggunakan pip, yaitu (berdasarkan Wikipedia):

Sebuah sistem pengelolaan package yang digunakan untuk menginstal dan mengelola paket software yang ditulis dalam Python. Banyak paket yang dapat ditemukan di dalam Python Package Index (PyPI).

Kamu dapat mengikuti langkah-langkah yang disebutkan dalam Python Packaging User Guide untuk menginstal pip, namun jika kamu memiliki Python 2.7.9 keatas, atau Python 3.4 keatas, kamu sudah memiliki pip!

PyPDF2 sekarang dapat dengan mudah diinstal dengan mengetikkan perintah di bawah (di dalam Terminal Mac OS X):

pip install pypdf2

Bagus! Kamu sekarang telah menginstal PyPDF2, dan kamu siap untuk bermain dengan dokumen PDF.

Membaca Dokumen PDF

File contoh yang akan kita kerjakan dalam tutorial ini adalah sample.pdf. Teruskan dan download file untuk mengikuti tutorial ini, atau kamu dapat hanya menggunakan file PDF yang kamu suka.

Sekarang mari lanjutkan dan baca dokumen PDF. Karena kita akan menggunakan PyPDF2, kita perlu mengimpor module, sebagai berikut:

import pypdf2

Setelah mengimpor module, kita akan menggunakan class PdfFileReader. Sehingga, script untuk membaca dokumen PDF tampak sebagai berikut:

1
import PyPDF2
2
pdf_file = open('sample.pdf')
3
read_pdf = PyPDF2.PdfFileReader(pdf_file)

Operasi Lebih Lanjut Tentang Dokumen PDF

Setelah membaca dokumen PDF, kita sekarang dapat melaksanakan operasi yang berbeda pada dokumen, seperti yang kita lihat dalam section ini.

Jumlah Halaman

Mari periksa jumlah halaman dalam sample.pdf. Untuk ini, kita dapat menggunakan method getNumPages():

1
number_of_pages = read_pdf.getNumPages()
2
print number_of_pages

Dalam kasus ini, nilai yang dikembalikan akan menjadi 1.

Nomor Halaman

Mari sekarang periksa nomor beberapa halaman dalam dokumen PDF. Kita dapat menggunakan method getPageNumber(page), Perhatikan bahwa kita harus melewatkan sebuah obyek jenis page pada method itu. Untuk menarik sebuah halaman, kita akan menggunakan method getPage(number), dimana number mewakili nomor halaman di dalam dokumen PDF. Argument number dimulai dengan nilai 0.

Nah, saya tahu ketika menggunakan getPage(number) kamu telah mengetahui nomor halaman, namun ini hanya untuk mengilustrasikan bagaimana menggunakan method tersebut bersama-sama. Ini dapat didemonstrasikan di dalam script berikut:

1
page = read_pdf.getPage(0)
2
page_number = read_pdf.getPageNumber(page)
3
print page_number

Silahkan, coba script itu. Output apa yang kamu dapatkan?

Kita tahu bahwa di dalam sample.pdf (file yang kita uji coba), kita hanya memiliki satu halaman (nomor 0). Bagaimana jika kita melewatkan angka 1 sebagai nomor halaman untuk getPage(number)? Dalam kasus ini, kamu akan mendapatkan error sebagai berikut:

1
Traceback (most recent call last):
2
  File "test.py", line 6, in <module>
3
    page = read_pdf.getPage(1)
4
  File "/usr/local/lib/python2.7/site-packages/PyPDF2/pdf.py", line 1158, in getPage
5
    return self.flattenedPages[pageNumber]
6
IndexError: list index out of range

Ini karena halaman tidak tersedia, dan kita menggunakan sebuah nomor halaman yang di luar batas (tidak ada).

Mode Halaman

Halaman PDF hadir dengan mode yang berbeda, yaitu berupa sebagai berikut:

/UseNone Jangan menampilkan garis luar atau panel thumbnail
/UseOutlines
Tunjukkan panel garis luar (alias bookmark)
/UseThumbs
Tunjukkan panel thumbnail halaman
/FullScreen
Tampilan layar penuh
/UseOC
Tunjukkan panel Optional Content Group
/UseAttachments
Tunjukkan panel attachment

Untuk mengecek mode halaman, kita dapat menggunakan script berikut:

1
page = read_pdf.getPage(0)
2
page_mode = read_pdf.getPageMode()
3
print page_mode

Dalam hal dokumen PDF kita (sample.pdf), nilai yang dikembalikan adalah none, yang berarti bahwa mode halaman tidak dikhususkan. Jika kamu ingin menentukan sebuah mode halaman, kamu dapat menggunakan method setPageMode(mode), dimana mode adalah salah satu mode yang terdaftar di dalam tabel di atas.

Mengekstrak Teks

Kita telah berkeliling di sekitar file sejauh ini, jadi mari lihat apa yang ada di dalam. Method extractText() akan menjadi teman kita dalam tugas ini.

Mari saya tunjukkan script utuh untuk melakukan itu, yang berlawanan dengan apa yang saya lakukan di atas dalam menunjukkanmu hanya script yang dibutuhkan untuk melakukan sebuah operasi. Script untuk mengekstrak teks dari dokumen PDF adalah sebagai berikut:

1
import PyPDF2
2
pdf_file = open('sample.pdf')
3
read_pdf = PyPDF2.PdfFileReader(pdf_file)
4
number_of_pages = read_pdf.getNumPages()
5
page = read_pdf.getPage(0)
6
page_content = page.extractText()
7
print page_content

Saya terkejut ketika saya mendapatkan input di bawah dibandingkan dengan yang ada di dalam sample.pdf:

1
!"#$%#$%&%$&'()*%+,-%./01'*23%4

2
5'%1$#26%3/%7/))/8%&)/26%8#3"%3"*%313/9#&)
3
%

Ini kemungkinan besar disebabkan karena permasalahan font, seperti kode karakter yang mengarahkan ke nilai lainnya. Jadi terkadang itu sebuah isu dengan dokumen PDF itu sendiri, dimana dokumen PDF mungkin tidak berisi data yang diperlukan untuk mengembalikan konten.

Oleh karena itu saya mencoba file lainnya, yaitu paper saya: paper.pdf. Teruskan dan ganti sample.pdf di dalam code dengan paper.pdf. Output dalam kasus ini adalah:

1
Medical Imaging 2012: Image Perception, Observer Performance, and Technology Assessment, edited by Craig K. Abbey, Claudia R. Mello-Thoms, Proc. of SPIE Vol. 8318, 83181I © 2012 SPIE · CCC code: 1605-7422/12/$18 · doi: 10.1117/12.912389Proc. of SPIE Vol. 8318  83181I-1Downloaded from SPIE Digital Library on 13 Aug 2012 to 134.130.12.208. Terms of Use:  http://spiedl.org/terms

Namun, dimana sisa teks dalam halaman? Nah, sebenarnya method extractText() tampak tidak sempurna, jadi perlu dibuat beberapa peningkatan. Namun, goal di sini adalah menunjukkanmu bagaimana berkerja dengan file  PDF menggunakan Python, dan tampaknya perlu dibuat beberapa peningkatan.

Kesimpulan

Seperti yang dapat kita lihat, Python membuatnya sederhana untuk berkerja dengan dokumen PDF. Tutorial ini hanya menggores permukaan topik ini, dan kamu dapat menemukan lebih banyak detail pada operasi yang berbeda yang dapat kamu terapkan pada dokumen PDF di halaman dokumentasi PyPDF2.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.