Práce se soubory PDF v Pythonu

Práce se soubory PDF v Pythonu

Všichni musíte být obeznámeni s tím, co jsou soubory PDF. Ve skutečnosti jsou jedním z nejdůležitějších a nejrozšířenějších digitálních médií. PDF znamená Přenosný formát dokumentu . Používá .pdf rozšíření. Slouží k prezentaci a výměně dokumentů spolehlivě nezávisle na softwarovém hardwaru nebo operačním systému.
Vynalezl Adobe PDF je nyní otevřený standard spravovaný Mezinárodní organizací pro standardizaci (ISO). Soubory PDF mohou obsahovat odkazy a tlačítka z polí zvuku, videa a obchodní logiky.
V tomto článku se naučíme, jak můžeme provádět různé operace jako:
 

  • Extrahování textu z PDF
  • Otáčení stránek PDF
  • Sloučení souborů PDF
  • Rozdělení PDF
  • Přidání vodoznaku na stránky PDF

Instalace: Pomocí jednoduchých pythonových skriptů!
Budeme používat modul třetí strany pypdf.
pypdf je knihovna pythonu vytvořená jako sada nástrojů PDF. Je schopen:
 

  • Extrahování informací o dokumentu (autor názvu …)
  • Rozdělení dokumentů stránku po stránce
  • Slučování dokumentů stránku po stránce
  • Oříznutí stránek
  • Sloučení více stránek do jedné stránky
  • Šifrování a dešifrování souborů PDF
  • a další!

Chcete-li nainstalovat pypdf, spusťte z příkazového řádku následující příkaz:

 pip install pypdf  

Tento název modulu rozlišuje velká a malá písmena, takže se ujistěte, že a je malá písmena a vše ostatní je velká písmena. Všechny kódy a soubory PDF použité v tomto tutoriálu/článku jsou k dispozici zde .

1. Extrahování textu ze souboru 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  ())   

Výstup výše uvedeného programu vypadá takto:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

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

Pokusme se porozumět výše uvedenému kódu po částech:
 

 reader = PdfReader('example.pdf')   
  • Zde vytvoříme objekt PdfReader třídy modulu pypdf a předejte cestu k souboru PDF a získejte objekt čtečky PDF.
     
 print(len(reader.pages))   
  • stránky vlastnost udává počet stránek v souboru PDF. Například v našem případě je to 20 (viz první řádek výstupu).
     
 pageObj = reader.pages[0]   
  • Nyní vytvoříme objekt PageObject třída modulu pypdf. Objekt čtečky PDF má funkci stránky[] který převezme číslo stránky (počínaje indexem 0) jako argument a vrátí objekt stránky.
     
 print(pageObj.extract_text())   
  • Objekt stránky má funkci extrakt_text() extrahovat text ze stránky PDF.


Poznámka: Zatímco soubory PDF jsou skvělé pro uspořádání textu způsobem, který si lidé snadno vytisknou a přečtou, není snadné je softwarem analyzovat do prostého textu. Jako takový může pypdf dělat chyby při extrahování textu z PDF a dokonce nemusí být možné některé soubory PDF vůbec otevřít. S tím se bohužel moc dělat nedá. pypdf může jednoduše být neschopný pracovat s některými vašimi konkrétními soubory PDF.

2. Otáčení stránek 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  ()   

Zde se můžete podívat, jak na první stránce otočený_příklad.pdf vypadá po otočení jako (pravý obrázek):

Otočení souboru pdf

Některé důležité body související s výše uvedeným kódem:
 

  • Pro otočení nejprve vytvoříme objekt čtečky PDF původního PDF.
 writer = PdfWriter()   
  • Otočené stránky budou zapsány do nového PDF. Pro zápis do PDF používáme objekt PdfWriter třída modulu pypdf.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Nyní iterujeme každou stránku původního PDF. Získáme objekt stránky pomocí .stránky[] metoda třídy PDF reader. Nyní otočíme stránku o střídat() metoda třídy objektu stránky. Potom přidáme stránku do objektu PDF Writer pomocí přidat() metoda třídy PDF Writer předáním objektu otočené stránky.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Nyní musíme zapsat stránky PDF do nového souboru PDF. Nejprve otevřeme nový objekt souboru a zapíšeme do něj stránky PDF pomocí napsat() metoda objektu PDF Writer. Nakonec zavřeme původní objekt souboru PDF a nový objekt souboru.

3. Slučování souborů 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  ()   

Výstupem výše uvedeného programu je kombinované PDF kombinovaný_příklad.pdf získané sloučením example.pdf a otočený_příklad.pdf .
 

  • Pojďme se podívat na důležité aspekty tohoto programu:
     
 pdfWriter = PdfWriter()  
  • Pro sloučení používáme předpřipravenou třídu PdfWriter modulu pypdf.
    Zde vytvoříme objekt pdfwriter třídy PDF Writer
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Nyní připojíme objekt souboru každého PDF k objektu PDF Writer pomocí připojit() metoda.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • Nakonec zapíšeme stránky PDF do výstupního souboru PDF pomocí napsat metoda objektu PDF Writer.

4. Rozdělení souboru 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  ()   

Výstupem budou tři nové soubory PDF s rozdělení 1 (strana 01) rozdělení 2 (strana 23) rozdělení 3 (strana 4-konec) .
Ve výše uvedeném programu python nebyla použita žádná nová funkce nebo třída. Pomocí jednoduché logiky a iterací jsme vytvořili rozdělení předaného PDF podle předaného seznamu rozdělí .

5. Přidání vodoznaku na stránky 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  ()   

Takto vypadá první stránka původního (vlevo) a vodoznaku (vpravo) souboru PDF:
 

Vodoznak do souboru pdf

  • Celý proces je stejný jako v příkladu rotace stránky. Jediný rozdíl je:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Objekt stránky se převede na objekt stránky s vodoznakem pomocí add_watermark() funkce.
  • Pokusme se pochopit add_watermark() funkce:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Nejprve vytvoříme objekt čtečky PDF vodoznak.pdf . K předanému objektu stránky, který používáme merge_page() a předat objekt stránky první stránky objektu čtečky PDF vodoznaku. Tím se překryje vodoznak přes předaný objekt stránky.


A tady se dostáváme na konec tohoto dlouhého tutoriálu o práci se soubory PDF v pythonu.
Nyní si můžete snadno vytvořit svého vlastního správce PDF!
Reference:
 

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

Pokud máte rádi GeeksforGeeks a chtěli byste přispět, můžete také napsat článek pomocí write.geeksforgeeks.org nebo poslat svůj článek na [email protected]. Podívejte se, jak se váš článek objeví na hlavní stránce GeeksforGeeks a pomozte ostatním Geekům.
Pokud najdete něco nesprávného nebo pokud chcete sdílet více informací o výše uvedeném tématu, napište prosím komentáře.
 

Vytvořit kvíz