Python'da PDF dosyalarıyla çalışma

Python'da PDF dosyalarıyla çalışma

Hepiniz PDF'lerin ne olduğunu biliyor olmalısınız. Aslında bunlar en önemli ve en yaygın kullanılan dijital medyalardan biridir. PDF'nin anlamı Taşınabilir Belge Formatı . Kullanır .pdf eklenti. Yazılım donanımı veya işletim sisteminden bağımsız olarak belgeleri güvenilir bir şekilde sunmak ve paylaşmak için kullanılır.
Tarafından icat edildi Adobe PDF artık Uluslararası Standardizasyon Örgütü (ISO) tarafından sürdürülen açık bir standarttır. PDF'ler, ses, video ve iş mantığı alanlarındaki bağlantılar ve düğmeleri içerebilir.
Bu yazıda aşağıdaki gibi çeşitli işlemleri nasıl yapabileceğimizi öğreneceğiz:
 

  • PDF'den metin çıkarma
  • PDF sayfalarını döndürme
  • PDF'leri birleştirme
  • PDF'yi bölme
  • PDF sayfalarına filigran ekleme

Kurulum: Basit python komut dosyalarını kullanma!
Üçüncü taraf bir modül pypdf kullanacağız.
pypdf, PDF araç seti olarak oluşturulmuş bir python kütüphanesidir. Şunları yapabilir:
 

  • Belge bilgilerinin çıkarılması (başlık yazarı…)
  • Belgeleri sayfa sayfa bölme
  • Belgeleri sayfa sayfa birleştirme
  • Sayfaları kırpma
  • Birden fazla sayfayı tek sayfada birleştirme
  • PDF dosyalarını şifreleme ve şifresini çözme
  • ve daha fazlası!

Pypdf'yi yüklemek için komut satırından aşağıdaki komutu çalıştırın:

 pip install pypdf  

Bu modül adı büyük/küçük harfe duyarlı olduğundan emin olun. Ve küçük harftir ve geri kalan her şey büyük harftir. Bu eğitimde/makalede kullanılan tüm kod ve PDF dosyaları mevcuttur Burada .

1. PDF dosyasından metin çıkarma

Python
   # importing required classes   from   pypdf   import   PdfReader   # creating a pdf reader object   reader   =   PdfReader  (  'example.pdf'  )   # printing number of pages in pdf file   print  (  len  (  reader  .  pages  ))   # creating a page object   page   =   reader  .  pages  [  0  ]   # extracting text from page   print  (  page  .  extract_text  ())   

Yukarıdaki programın çıktısı şuna benzer:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]

Yukarıdaki kodu parçalar halinde anlamaya çalışalım:
 

 reader = PdfReader('example.pdf')   
  • Burada bir nesne yaratıyoruz Pdf Okuyucu pypdf modülünün sınıfını seçin ve PDF dosyasının yolunu iletin ve bir PDF okuyucu nesnesi alın.
     
 print(len(reader.pages))   
  • sayfalar özelliği PDF dosyasındaki sayfa sayısını verir. Örneğin bizim durumumuzda 20'dir (çıkışın ilk satırına bakın).
     
 pageObj = reader.pages[0]   
  • Şimdi bir nesne yaratıyoruz SayfaNesnesi pypdf modülü sınıfı. PDF okuyucu nesnesinin işlevi vardır sayfalar[] argüman olarak sayfa numarasını (indeks 0'dan başlayarak) alır ve sayfa nesnesini döndürür.
     
 print(pageObj.extract_text())   
  • Sayfa nesnesinin işlevi var özü_metin() PDF sayfasından metin çıkarmak için.


Not: PDF dosyaları, metni insanların kolayca yazdırabileceği ve okuyabileceği bir şekilde düzenlemek için harika olsa da, yazılımın bunları düz metne ayrıştırması kolay değildir. Bu nedenle pypdf, PDF'den metin çıkarırken hata yapabilir ve hatta bazı PDF'leri hiç açamayabilir. Bu konuda maalesef yapabileceğiniz pek bir şey yok. pypdf, belirli PDF dosyalarınızın bazılarıyla çalışamayabilir.

2. PDF sayfalarını döndürme
 

Python
   # importing the required classes   from   pypdf   import   PdfReader     PdfWriter   def   PDFrotate  (  origFileName     newFileName     rotation  ):   # creating a pdf Reader object   reader   =   PdfReader  (  origFileName  )   # creating a pdf writer object for new pdf   writer   =   PdfWriter  ()   # rotating each page   for   page   in   range  (  len  (  reader  .  pages  )):   pageObj   =   reader  .  pages  [  page  ]   pageObj  .  rotate  (  rotation  )   # Add the rotated page object to the PDF writer   writer  .  add_page  (  pageObj  )   # Write the rotated pages to the new PDF file   with   open  (  newFileName     'wb'  )   as   newFile  :   writer  .  write  (  newFile  )   def   main  ():   # original pdf file name   origFileName   =   'example.pdf'   # new pdf file name   newFileName   =   'rotated_example.pdf'   # rotation angle   rotation   =   270   # calling the PDFrotate function   PDFrotate  (  origFileName     newFileName     rotation  )   if   __name__   ==   '__main__'  :   # calling the main function   main  ()   

Burada ilk sayfanın nasıl olduğunu görebilirsiniz. döndürülmüş_örnek.pdf döndürmeden sonra (sağdaki resim) gibi görünüyor:

Bir pdf dosyasını döndürme

Yukarıdaki kodla ilgili bazı önemli noktalar:
 

  • Döndürme için öncelikle orijinal PDF'nin bir PDF okuyucu nesnesini oluştururuz.
 writer = PdfWriter()   
  • Döndürülmüş sayfalar yeni bir PDF'ye yazılacaktır. PDF'lere yazmak için nesnesini kullanırız Pdf Yazarı pypdf modülü sınıfı.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Şimdi orijinal PDF'nin her sayfasını yineliyoruz. Sayfa nesnesini şu şekilde alıyoruz: .sayfalar[] PDF okuyucu sınıfının yöntemi. Şimdi sayfayı şu şekilde döndürüyoruz: döndür() sayfa nesnesi sınıfının yöntemi. Daha sonra kullanarak PDF yazıcı nesnesine bir sayfa ekliyoruz. eklemek() Döndürülmüş sayfa nesnesini ileterek PDF yazıcı sınıfının yöntemini kullanın.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Şimdi PDF sayfalarını yeni bir PDF dosyasına yazmamız gerekiyor. Öncelikle yeni dosya nesnesini açıyoruz ve ona PDF sayfaları yazıyoruz. yazmak() PDF yazıcı nesnesinin yöntemi. Son olarak orijinal PDF dosya nesnesini ve yeni dosya nesnesini kapatıyoruz.

3. PDF dosyalarını birleştirme

Python
   # importing required modules   from   pypdf   import   PdfWriter   def   PDFmerge  (  pdfs     output  ):   # creating pdf file writer object   pdfWriter   =   PdfWriter  ()   # appending pdfs one by one   for   pdf   in   pdfs  :   pdfWriter  .  append  (  pdf  )   # writing combined pdf to output pdf file   with   open  (  output     'wb'  )   as   f  :   pdfWriter  .  write  (  f  )   def   main  ():   # pdf files to merge   pdfs   =   [  'example.pdf'     'rotated_example.pdf'  ]   # output pdf file name   output   =   'combined_example.pdf'   # calling pdf merge function   PDFmerge  (  pdfs  =  pdfs     output  =  output  )   if   __name__   ==   '__main__'  :   # calling the main function   main  ()   

Yukarıdaki programın çıktısı birleştirilmiş bir PDF'dir birleştirilmiş_örnek.pdf birleştirilmesiyle elde edilen örnek.pdf Ve döndürülmüş_örnek.pdf .
 

  • Bu programın önemli yönlerine bir göz atalım:
     
 pdfWriter = PdfWriter()  
  • Birleştirme için önceden oluşturulmuş bir sınıf kullanıyoruz Pdf Yazarı pypdf modülünün.
    Burada bir nesne yaratıyoruz pdf yazarı PDF yazar sınıfının
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Şimdi her PDF'nin dosya nesnesini PDF yazıcı nesnesine ekliyoruz. ekleme() Yöntem.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • Son olarak PDF sayfalarını kullanarak çıktı PDF dosyasına yazıyoruz. yazmak PDF yazıcı nesnesinin yöntemi.

4. PDF dosyasını bölme

Python
   # importing the required modules   from   pypdf   import   PdfReader     PdfWriter   def   PDFsplit  (  pdf     splits  ):   # creating pdf reader object   reader   =   PdfReader  (  pdf  )   # starting index of first slice   start   =   0   # starting index of last slice   end   =   splits  [  0  ]   for   i   in   range  (  len  (  splits  )  +  1  ):   # creating pdf writer object for (i+1)th split   writer   =   PdfWriter  ()   # output pdf file name   outputpdf   =   pdf  .  split  (  '.pdf'  )[  0  ]   +   str  (  i  )   +   '.pdf'   # adding pages to pdf writer object   for   page   in   range  (  start    end  ):   writer  .  add_page  (  reader  .  pages  [  page  ])   # writing split pdf pages to pdf file   with   open  (  outputpdf     'wb'  )   as   f  :   writer  .  write  (  f  )   # interchanging page split start position for next split   start   =   end   try  :   # setting split end position for next split   end   =   splits  [  i  +  1  ]   except   IndexError  :   # setting split end position for last split   end   =   len  (  reader  .  pages  )   def   main  ():   # pdf file to split   pdf   =   'example.pdf'   # split page positions   splits   =   [  2    4  ]   # calling PDFsplit function to split pdf   PDFsplit  (  pdf     splits  )   if   __name__   ==   '__main__'  :   # calling the main function   main  ()   

Çıktı üç yeni PDF dosyası olacak bölünmüş 1 (sayfa 01) bölünmüş 2(sayfa 23) bölünmüş 3(sayfa 4-son) .
Yukarıdaki python programında yeni bir fonksiyon veya sınıf kullanılmamıştır. Basit bir mantık ve yinelemeler kullanarak, aktarılan PDF'nin aktarılanlar listesine göre bölümlerini oluşturduk Bölünmeler .

5. PDF sayfalarına filigran ekleme

Python
   # importing the required modules   from   pypdf   import   PdfReader     PdfWriter   def   add_watermark  (  wmFile     pageObj  ):   # creating pdf reader object of watermark pdf file   reader   =   PdfReader  (  wmFile  )   # merging watermark pdf's first page with passed page object.   pageObj  .  merge_page  (  reader  .  pages  [  0  ])   # returning watermarked page object   return   pageObj   def   main  ():   # watermark pdf file name   mywatermark   =   'watermark.pdf'   # original pdf file name   origFileName   =   'example.pdf'   # new pdf file name   newFileName   =   'watermarked_example.pdf'   # creating pdf File object of original pdf   pdfFileObj   =   open  (  origFileName     'rb'  )   # creating a pdf Reader object   reader   =   PdfReader  (  pdfFileObj  )   # creating a pdf writer object for new pdf   writer   =   PdfWriter  ()   # adding watermark to each page   for   page   in   range  (  len  (  reader  .  pages  )):   # creating watermarked page object   wmpageObj   =   add_watermark  (  mywatermark     reader  .  pages  [  page  ])   # adding watermarked page object to pdf writer   writer  .  add_page  (  wmpageObj  )   # writing watermarked pages to new file   with   open  (  newFileName     'wb'  )   as   newFile  :   writer  .  write  (  newFile  )   # closing the original pdf file object   pdfFileObj  .  close  ()   if   __name__   ==   '__main__'  :   # calling the main function   main  ()   

Orijinal (solda) ve filigranlı (sağda) PDF dosyasının ilk sayfası şu şekilde görünür:
 

Pdf dosyasına filigran ekleme

  • Tüm süreç sayfa döndürme örneğiyle aynıdır. Tek fark şu:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Sayfa nesnesi kullanılarak filigranlı sayfa nesnesine dönüştürülür. add_watermark() işlev.
  • Anlamaya çalışalım add_watermark() işlev:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Öncelikle bir PDF okuyucu nesnesi oluşturuyoruz filigran.pdf . Kullandığımız iletilen sayfa nesnesine birleştirme_sayfası() filigran PDF okuyucu nesnesinin ilk sayfasının sayfa nesnesini çalıştırın ve iletin. Bu, filigranı aktarılan sayfa nesnesinin üzerine yerleştirecektir.


Ve burada Python'da PDF dosyalarıyla çalışmaya ilişkin bu uzun eğitimin sonuna ulaşıyoruz.
Artık kendi PDF yöneticinizi kolayca oluşturabilirsiniz!
Referanslar:
 

  • https://automatetheboringstuff.com/chapter13/
  • https://pypi.org/project/pypdf/

GeeksforGeeks'i beğeniyorsanız ve katkıda bulunmak istiyorsanız write.geeksforgeeks.org adresini kullanarak bir makale yazabilir veya makalenizi [email protected] adresine e-postayla gönderebilirsiniz. Makalenizin GeeksforGeeks ana sayfasında görünmesini sağlayın ve diğer Geek'lere yardımcı olun.
Yanlış bir şey bulursanız veya yukarıda tartışılan konu hakkında daha fazla bilgi paylaşmak istiyorsanız lütfen yorum yazın.
 

Test Oluştur