() 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.