Praca z plikami PDF w Pythonie

Praca z plikami PDF w Pythonie

Wszyscy powinniście wiedzieć, czym są pliki PDF. W rzeczywistości są jednymi z najważniejszych i najpowszechniej używanych mediów cyfrowych. PDF oznacza Przenośny format dokumentu . Używa .pdf rozszerzenie. Służy do niezawodnego prezentowania i wymiany dokumentów niezależnie od oprogramowania sprzętowego lub systemu operacyjnego.
Wynaleziony przez Cegła suszona na słońcu PDF jest obecnie otwartym standardem utrzymywanym przez Międzynarodową Organizację Normalizacyjną (ISO). Pliki PDF mogą zawierać łącza i przyciski z pól audio wideo i logiki biznesowej.
W tym artykule dowiemy się, jak możemy wykonywać różne operacje, takie jak:
 

  • Wyodrębnianie tekstu z pliku PDF
  • Obracanie stron PDF
  • Łączenie plików PDF
  • Dzielenie pliku PDF
  • Dodawanie znaku wodnego do stron PDF

Instalacja: Używanie prostych skryptów Pythona!
Będziemy używać modułu pypdf innej firmy.
pypdf to biblioteka Pythona zbudowana jako zestaw narzędzi PDF. Potrafi:
 

  • Wyodrębnianie informacji o dokumencie (autor tytułu…)
  • Dzielenie dokumentów strona po stronie
  • Łączenie dokumentów strona po stronie
  • Przycinanie stron
  • Łączenie wielu stron w jedną
  • Szyfrowanie i deszyfrowanie plików PDF
  • i więcej!

Aby zainstalować pypdf, uruchom następujące polecenie z wiersza poleceń:

 pip install pypdf  

W nazwie modułu rozróżniana jest wielkość liter, więc upewnij się, że I jest pisany małymi literami, a wszystko inne jest pisane wielkimi literami. Dostępny jest cały kod i pliki PDF użyte w tym samouczku/artykule Tutaj .

1. Wyodrębnianie tekstu z pliku PDF

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

Dane wyjściowe powyższego programu wyglądają następująco:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

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

Spróbujmy zrozumieć powyższy kod fragmentami:
 

 reader = PdfReader('example.pdf')   
  • Tutaj tworzymy obiekt Czytnik PDF class modułu pypdf i podaj ścieżkę do pliku PDF i pobierz obiekt czytnika PDF.
     
 print(len(reader.pages))   
  • strony Właściwość podaje liczbę stron w pliku PDF. Na przykład w naszym przypadku jest to 20 (patrz pierwszy wiersz wyniku).
     
 pageObj = reader.pages[0]   
  • Teraz tworzymy obiekt Obiekt strony klasa modułu pypdf. Obiekt czytnika PDF ma funkcję strony[] który przyjmuje numer strony (zaczynając od indeksu 0) jako argument i zwraca obiekt strony.
     
 print(pageObj.extract_text())   
  • Obiekt strony ma funkcję wyodrębnij_tekst() aby wyodrębnić tekst ze strony PDF.


Notatka: Chociaż pliki PDF doskonale nadają się do układania tekstu w sposób łatwy do wydrukowania i odczytania, oprogramowanie nie jest w stanie łatwo je przetworzyć na zwykły tekst. W związku z tym pypdf może popełniać błędy podczas wyodrębniania tekstu z pliku PDF, a nawet może w ogóle nie być w stanie otworzyć niektórych plików PDF. Niestety niewiele możesz z tym zrobić. pypdf może po prostu nie działać z niektórymi konkretnymi plikami PDF.

2. Obracanie stron PDF
 

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

Tutaj możesz zobaczyć, jak wygląda pierwsza strona obrócony_przykład.pdf wygląda (prawy obraz) po obróceniu:

Obracanie pliku pdf

Kilka ważnych punktów związanych z powyższym kodem:
 

  • W celu rotacji najpierw tworzymy obiekt czytnika PDF z oryginalnego pliku PDF.
 writer = PdfWriter()   
  • Obrócone strony zostaną zapisane w nowym pliku PDF. Do zapisu w plikach PDF używamy obiektu PDFWriter klasa modułu pypdf.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Teraz iterujemy każdą stronę oryginalnego pliku PDF. Otrzymujemy obiekt strony według .strony[] metoda klasy czytnika PDF. Teraz obracamy stronę o obracać() metoda klasy obiektu strony. Następnie dodajemy stronę do obiektu zapisującego PDF za pomocą dodać() metoda klasy modułu zapisywania plików PDF poprzez przekazanie obróconego obiektu strony.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Teraz musimy zapisać strony PDF w nowym pliku PDF. Najpierw otwieramy nowy obiekt plikowy i zapisujemy do niego strony PDF za pomocą pisać() metoda obiektu zapisującego PDF. Na koniec zamykamy oryginalny obiekt pliku PDF i nowy obiekt pliku.

3. Łączenie plików PDF

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

Dane wyjściowe powyższego programu to połączony plik PDF połączony_przykład.pdf uzyskane przez połączenie przykład.pdf I obrócony_przykład.pdf .
 

  • Przyjrzyjmy się ważnym aspektom tego programu:
     
 pdfWriter = PdfWriter()  
  • Do łączenia używamy gotowej klasy PDFWriter modułu pypdf.
    Tutaj tworzymy obiekt pdfwriter zajęć z programu do tworzenia plików PDF
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Teraz dołączamy obiekt pliku każdego pliku PDF do obiektu zapisującego PDF za pomocą dodać() metoda.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • Na koniec zapisujemy strony PDF do wyjściowego pliku PDF za pomocą pisać metoda obiektu zapisującego PDF.

4. Dzielenie pliku PDF

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

Wynikiem będą trzy nowe pliki PDF z rozszerzeniem podział 1 (strona 01) podział 2 (strona 23) podział 3 (strona 4-koniec) .
W powyższym programie Pythona nie użyto żadnej nowej funkcji ani klasy. Stosując prostą logikę i iteracje, utworzyliśmy podziały przekazanego pliku PDF zgodnie z przekazaną listą dzieli .

5. Dodawanie znaku wodnego do stron PDF

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

Oto jak wygląda pierwsza strona oryginalnego (po lewej) i znaku wodnego (po prawej) pliku PDF:
 

Znak wodny pliku pdf

  • Cały proces jest taki sam, jak w przykładzie rotacji strony. Jedyna różnica to:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Obiekt strony jest konwertowany na obiekt strony ze znakiem wodnym za pomocą dodaj_znak wodny() funkcjonować.
  • Spróbujmy zrozumieć dodaj_znak wodny() funkcjonować:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Przede wszystkim tworzymy obiekt czytnika PDF znak wodny.pdf . Do przekazanego obiektu strony używamy merge_page() funkcję i przekazać obiekt strony pierwszej strony obiektu czytnika PDF ze znakiem wodnym. Spowoduje to nałożenie znaku wodnego na przekazany obiekt strony.


I tu dochodzimy do końca tego długiego samouczka na temat pracy z plikami PDF w Pythonie.
Teraz możesz łatwo stworzyć własnego menedżera plików PDF!
Referencje:
 

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

Jeśli podoba Ci się GeeksforGeeks i chcesz wnieść swój wkład, możesz również napisać artykuł za pomocą write.geeksforgeeks.org lub wysłać swój artykuł na adres [email protected]. Zobacz swój artykuł pojawiający się na stronie głównej GeeksforGeeks i pomóż innym Geekom.
Napisz komentarz, jeśli znajdziesz coś nieprawidłowego lub jeśli chcesz podzielić się więcej informacjami na temat omówiony powyżej.
 

Utwórz quiz