Jullie moeten allemaal bekend zijn met wat PDF's zijn. Sterker nog, ze zijn een van de belangrijkste en meest gebruikte digitale media. PDF staat voor Draagbaar documentformaat . Het gebruikt .pdf verlenging. Het wordt gebruikt om documenten betrouwbaar te presenteren en uit te wisselen, onafhankelijk van software, hardware of besturingssysteem.
Uitgevonden door Adobe , PDF is nu een open standaard die wordt onderhouden door de Internationale Organisatie voor Standaardisatie (ISO). PDF's kunnen koppelingen en knoppen, formuliervelden, audio, video en bedrijfslogica bevatten.
In dit artikel zullen we leren hoe we verschillende bewerkingen kunnen uitvoeren, zoals:
- Tekst uit pdf halen
- PDF-pagina's roteren
- PDF's samenvoegen
- PDF splitsen
- Watermerk toevoegen aan PDF-pagina's
Installatie: Gebruik eenvoudige Python-scripts!
We zullen een module van derden gebruiken, pypdf.
pypdf is een Python-bibliotheek gebouwd als een PDF-toolkit. Het is in staat om:
- Documentinformatie extraheren (titel, auteur, …)
- Documenten pagina voor pagina splitsen
- Documenten pagina voor pagina samenvoegen
- Pagina's bijsnijden
- Meerdere pagina's samenvoegen tot één pagina
- Coderen en decoderen van PDF-bestanden
- en meer!
Om pypdf te installeren, voert u de volgende opdracht uit vanaf de opdrachtregel:
pip install pypdf>
Deze modulenaam is hoofdlettergevoelig, dus zorg ervoor dat de En is kleine letters en al het andere is hoofdletters. Alle code en PDF-bestanden die in deze tutorial/artikel worden gebruikt, zijn beschikbaar hier .
1. Tekst extraheren uit een PDF-bestand
Python
tafels maken in latex
# 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())> |
>
>
De uitvoer van het bovenstaande programma ziet er als volgt uit:
vergelijking van leeuw en tijger
20 PythonBasics S.R.Doty August27,2008 Contents 1Preliminaries 4 1.1WhatisPython?................................... ..4 1.2Installationanddocumentation.................... .........4 [and some more lines...]>
Laten we proberen de bovenstaande code in stukjes te begrijpen:
reader = PdfReader('example.pdf')> - Hier maken we een object van PDF lezer klasse van de pypdf-module en geef het pad door naar het PDF-bestand en ontvang een PDF-lezerobject.
print(len(reader.pages))>
- Pagina's eigenschap geeft het aantal pagina's in het PDF-bestand aan. In ons geval is dit bijvoorbeeld 20 (zie eerste uitvoerregel).
pageObj = reader.pages[0]>
- Nu maken we een object van PaginaObject klasse van pypdf-module. PDF-lezerobject heeft functie Pagina's[] die het paginanummer (beginnend bij index 0) als argument neemt en het pagina-object retourneert.
print(pageObj.extract_text())>
- Pagina-object heeft functie extract_text() om tekst uit de PDF-pagina te extraheren.
Opmerking: Hoewel PDF-bestanden uitstekend geschikt zijn om tekst zo op te maken dat deze gemakkelijk door mensen kan worden afgedrukt en gelezen, is het voor software niet eenvoudig om deze in leesbare tekst te verwerken. Als zodanig kan pypdf fouten maken bij het extraheren van tekst uit een PDF en kan het zelfs zijn dat sommige PDF's helemaal niet kunnen worden geopend. Je kunt hier helaas niet veel aan doen. pypdf kan mogelijk eenvoudigweg niet werken met sommige van uw specifieke PDF-bestanden.
2. PDF-pagina's roteren
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)):> > ># 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()> |
>
>
Hier kunt u zien hoe de eerste pagina van geroteerd_voorbeeld.pdf ziet er na rotatie uit (rechter afbeelding):

Enkele belangrijke punten met betrekking tot de bovenstaande code:
- Voor rotatie maken we eerst een PDF-lezerobject van de originele PDF.
writer = PdfWriter()>
- Geroteerde pagina's worden naar een nieuwe PDF geschreven. Voor het schrijven naar PDF's gebruiken we het object van PdfWriter klasse van pypdf-module.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj)>
- Nu herhalen we elke pagina van de originele PDF. We krijgen een pagina-object door .Pagina's[] methode van PDF-lezerklasse. Nu draaien we de pagina om draaien() methode van paginaobjectklasse. Vervolgens voegen we een pagina toe aan het PDF-schrijverobject met behulp van toevoeging() methode van de PDF-schrijverklasse door het geroteerde paginaobject door te geven.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close()>
- Nu moeten we de PDF-pagina's naar een nieuw PDF-bestand schrijven. Eerst openen we het nieuwe bestandsobject en schrijven we er PDF-pagina's naar met behulp van schrijven() methode van PDF-schrijverobject. Ten slotte sluiten we het originele PDF-bestandsobject en het nieuwe bestandsobject.
3. PDF-bestanden samenvoegen
Python
Java-duur
# 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()> |
>
>
De uitvoer van het bovenstaande programma is een gecombineerde PDF, gecombineerd_voorbeeld.pdf , verkregen door samenvoeging voorbeeld.pdf En geroteerd_voorbeeld.pdf .
- Laten we eens kijken naar belangrijke aspecten van dit programma:
pdfMerger = PdfMerger()>
- Voor het samenvoegen gebruiken we een vooraf gebouwde klasse, PdfFusie van de pypdf-module.
Hier maken we een object pdfFusie van de PDF-fusieklasse
for pdf in pdfs: pdfmerger.append(open(focus, 'rb'))>
- Nu voegen we het bestandsobject van elk PDF-naar-PDF-samenvoegobject toe met behulp van de toevoegen() methode.
with open(output, 'wb') as f: pdfMerger.write(f)>
- Ten slotte schrijven we de PDF-pagina's naar het uitgevoerde PDF-bestand met behulp van schrijven methode voor het samenvoegen van PDF-objecten.
4. PDF-bestand splitsen
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()> |
Java-stapel
>
>
De uitvoer zal drie nieuwe PDF-bestanden zijn met split 1 (pagina 0,1), split 2 (pagina 2,3), split 3 (pagina 4-einde) .
Er is geen nieuwe functie of klasse gebruikt in het bovenstaande Python-programma. Met behulp van eenvoudige logica en iteraties hebben we de splitsingen van doorgegeven PDF's gemaakt volgens de doorgegeven lijst splitsingen .
5. Watermerk toevoegen aan PDF-pagina's
Python
# 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()> |
fabrieksmethode ontwerppatroon
>
>
Zo ziet de eerste pagina van het originele (links) en watermerk (rechts) PDF-bestand eruit:

- Het hele proces is hetzelfde als in het voorbeeld van paginarotatie. Het enige verschil is:
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page])>
- Pagina-object wordt geconverteerd naar een pagina-object met een watermerk met behulp van Voeg een watermerk toe() functie.
- Laten we proberen het te begrijpen Voeg een watermerk toe() functie:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj>
- In de eerste plaats maken we een PDF-lezerobject van watermerk.pdf . Voor het doorgegeven pagina-object gebruiken we merge_page() functie en geef het paginaobject van de eerste pagina van het watermerk PDF-lezerobject door. Hierdoor wordt het watermerk over het doorgegeven paginaobject gelegd.
En hier bereiken we het einde van deze lange tutorial over het werken met PDF-bestanden in Python.
Nu kunt u eenvoudig uw eigen PDF-manager maken!
Referenties:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Als u techcodeview.com leuk vindt en een bijdrage wilt leveren, kunt u ook een artikel schrijven met write.techcodeview.com of uw artikel mailen naar [email protected]
Schrijf opmerkingen als u iets onjuist vindt, of als u meer informatie wilt delen over het hierboven besproken onderwerp.