logo

Lucrul cu fișiere PDF în Python

Cu toții trebuie să fiți familiarizați cu ce sunt PDF-urile. De fapt, ele sunt una dintre cele mai importante și mai utilizate medii digitale. PDF înseamnă Format de document portabil . Folosește .pdf extensie. Este folosit pentru a prezenta și a schimba documente în mod fiabil, independent de software, hardware sau sistem de operare.
Inventat de Chirpici , PDF este acum un standard deschis menținut de Organizația Internațională pentru Standardizare (ISO). PDF-urile pot conține link-uri și butoane, câmpuri de formular, audio, video și logica de afaceri.
În acest articol, vom afla cum putem face diverse operațiuni precum:

  • Extragerea textului din PDF
  • Rotirea paginilor PDF
  • Îmbinarea PDF-urilor
  • Împărțirea PDF-ului
  • Adăugarea filigranului la paginile PDF

Instalare: Folosind scripturi Python simple!
Vom folosi un modul terță parte, pypdf.
pypdf este o bibliotecă Python construită ca un set de instrumente PDF. Este capabil de:

  • Extragerea informațiilor din document (titlu, autor, …)
  • Împărțirea documentelor pagină cu pagină
  • Îmbinarea documentelor pagină cu pagină
  • Decuparea paginilor
  • Îmbinarea mai multor pagini într-o singură pagină
  • Criptarea și decriptarea fișierelor PDF
  • și altele!

Pentru a instala pypdf, executați următoarea comandă din linia de comandă:



pip install pypdf>

Acest nume de modul face distincția între majuscule și minuscule, așa că asigurați-vă că și este cu litere mici și orice altceva este cu litere mari. Toate codurile și fișierele PDF utilizate în acest tutorial/articol sunt disponibile Aici .

1. Extragerea textului din fișierul PDF

Piton




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

>

>

întreg în șir java

Ieșirea programului de mai sus arată astfel:

20 PythonBasics S.R.Doty August27,2008 Contents 1Preliminaries 4 1.1WhatisPython?................................... ..4 1.2Installationanddocumentation.................... .........4   [and some more lines...]>

Să încercăm să înțelegem codul de mai sus în bucăți:

reader = PdfReader('example.pdf')>
  • Aici, creăm un obiect de PdfReader clasa de modul pypdf și transmiteți calea către fișierul PDF și obțineți un obiect de citire PDF.
print(len(reader.pages))>
  • pagini proprietatea oferă numărul de pagini din fișierul PDF. De exemplu, în cazul nostru, este 20 (vezi prima linie de ieșire).
pageObj = reader.pages[0]>
  • Acum, creăm un obiect de PageObject clasa modulului pypdf. Obiectul cititor PDF are funcție pagini[] care ia numărul paginii (începând de la indexul 0) ca argument și returnează obiectul pagină.
print(pageObj.extract_text())>
  • Obiectul pagină are funcție extract_text() pentru a extrage text din pagina PDF.

Notă: În timp ce fișierele PDF sunt excelente pentru aranjarea textului într-un mod ușor de imprimat și citit de către oameni, software-ul nu este ușor de analizat în text simplu. Ca atare, pypdf poate face greșeli atunci când extrage text dintr-un PDF și poate chiar să nu poată deschide deloc unele PDF-uri. Din păcate, nu prea poți face în acest sens. pypdf poate pur și simplu să nu poată funcționa cu unele dintre fișierele PDF specifice.

2. Rotirea paginilor PDF

Piton




# 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)):> > ># creating rotated page object> >pageObj>=> reader.pages[page]> >pageObj.rotate(rotation)> > ># adding rotated page object to pdf writer> >pdfWriter.add_page(pageObj)> > ># new pdf file object> >newFile>=> open>(newFileName,>'wb'>)> > ># writing rotated pages to new file> >pdfWriter.write(newFile)> > ># closing the new pdf file object> >newFile.close()> > > 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()>

>

>

Aici, puteți vedea cum este prima pagină a exemplu_rotat.pdf arată ca (imaginea din dreapta) după rotire:

Rotirea unui fișier pdf

Câteva puncte importante legate de codul de mai sus:

  • Pentru rotație, mai întâi creăm un obiect de citire PDF al PDF-ului original.
writer = PdfWriter()>
  • Paginile rotite vor fi scrise într-un nou PDF. Pentru a scrie în PDF-uri, folosim obiectul de PdfWriter clasa modulului pypdf.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj)>
  • Acum, repetăm ​​fiecare pagină a PDF-ului original. Obținem obiectul paginii de .pagini[] metoda clasei de citire PDF. Acum, rotim pagina roti() metoda clasei de obiecte de pagină. Apoi, adăugăm o pagină la obiectul PDF writer folosind adăugare() metoda clasei de redactare PDF prin trecerea obiectului pagină rotită.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close()>
  • Acum, trebuie să scriem paginile PDF într-un nou fișier PDF. În primul rând, deschidem noul obiect fișier și scriem pagini PDF în el folosind scrie() metoda obiectului de redactare PDF. În cele din urmă, închidem obiectul fișier PDF original și noul obiect fișier.

3. Îmbinarea fișierelor PDF

Piton




# importing required modules> from> pypdf>import> PdfMerger> > > def> PDFmerge(pdfs, output):> ># creating pdf file merger object> >pdfMerger>=> PdfMerger()> > ># appending pdfs one by one> >for> pdf>in> pdfs:> >pdfMerger.append(pdf)> > ># writing combined pdf to output pdf file> >with>open>(output,>'wb'>) as f:> >pdfMerger.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()>

>

>

siruri de sortare java

Rezultatul programului de mai sus este un PDF combinat, exemplu_combinat.pdf , obtinut prin contopire exemplu.pdf și exemplu_rotat.pdf .

  • Să aruncăm o privire asupra aspectelor importante ale acestui program:
pdfMerger = PdfMerger()>
  • Pentru fuziune, folosim o clasă pre-construită, PdfMerger a modulului pypdf.
    Aici, creăm un obiect pdf Fuziune din clasa de fuziune PDF
for pdf in pdfs: pdfmerger.append(open(focus, 'rb'))>
  • Acum, adăugăm obiectul fișierului fiecărui PDF la un obiect de fuziune PDF folosind adăuga() metodă.
with open(output, 'wb') as f: pdfMerger.write(f)>
  • În cele din urmă, scriem paginile PDF în fișierul PDF de ieșire folosind scrie metoda de fuziune PDF a obiectului.

4. Împărțirea fișierului PDF

Piton




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

>

>

Ieșirea vor fi trei fișiere PDF noi cu împărțire 1 (pagina 0,1), împărțire 2 (pagina 2, 3), împărțire 3 (pagina 4-sfârșit) .
Nu a fost folosită nicio funcție sau clasă nouă în programul python de mai sus. Folosind o logică simplă și iterații, am creat împărțirea PDF-ului trecut conform listei trecute despica .

5. Adăugarea filigranului la paginile PDF

Piton




întreg în șir java

# importing the required modules> from> pypdf>import> PdfReader> > def> add_watermark(wmFile, pageObj):> ># creating pdf reader object of watermark pdf file> >reader>=> PdfReader(wmFileObj)> > ># 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)> > ># new pdf file object> >newFile>=> open>(newFileName,>'wb'>)> > ># writing watermarked pages to new file> >writer.write(newFile)> > ># closing the new pdf file object> >newFile.close()> > if> __name__>=>=> '__main__'>:> ># calling the main function> >main()>

>

>

Iată cum arată prima pagină a fișierului PDF original (stânga) și cu filigran (dreapta):

Filigranarea fișierului pdf

  • Tot procesul este același ca exemplul de rotație a paginii. Singura diferenta este:
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page])>
  • Obiectul pagină este convertit în obiect pagină cu filigran folosind add_watermark() funcţie.
  • Să încercăm să înțelegem add_watermark() funcţie:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj>
  • În primul rând, creăm un obiect de citire PDF al filigran.pdf . Pentru obiectul pagină transmis, folosim merge_page() funcția și treceți obiectul pagină din prima pagină a obiectului cititor PDF filigran. Acest lucru va suprapune filigranul peste obiectul pagină trecut.

Și aici ajungem la sfârșitul acestui lung tutorial despre lucrul cu fișiere PDF în python.
Acum, vă puteți crea cu ușurință propriul manager PDF!
Referinte:

Dacă vă place techcodeview.com și doriți să contribui, puteți scrie și un articol folosind write.techcodeview.com sau trimiteți articolul la [email protected]
Vă rugăm să scrieți comentarii dacă găsiți ceva incorect sau dacă doriți să împărtășiți mai multe informații despre subiectul discutat mai sus.