Сви морате знати шта су ПДФ-ови. У ствари, они су један од најважнијих и нашироко коришћених дигиталних медија. ПДФ је скраћеница за Портабле Доцумент Формат . Користи се .пдф проширење. Користи се за представљање и размену докумената поуздано независно од софтверског хардвера или оперативног система.
Инвентед би Адобе ПДФ је сада отворени стандард који одржава Међународна организација за стандардизацију (ИСО). ПДФ-ови могу садржати везе и дугмад у пољу аудио видео и пословне логике.
У овом чланку ћемо научити како можемо да урадимо различите операције као што су:
- Извлачење текста из ПДФ-а
- Ротирање ПДФ страница
- Спајање ПДФ-ова
- Раздвајање ПДФ-а
- Додавање воденог жига на ПДФ странице
Инсталација: Коришћење једноставних Питхон скрипти!
Користићемо пипдф модул треће стране.
пипдф је питхон библиотека направљена као ПДФ алат. Способан је за:
- Издвајање информација о документу (аутор наслова…)
- Подела докумената страницу по страницу
- Спајање докумената страницу по страницу
- Обрезивање страница
- Спајање више страница у једну страницу
- Шифровање и дешифровање ПДФ датотека
- и више!
Да бисте инсталирали пипдф, покрените следећу команду из командне линије:
pip install pypdfОво име модула разликује велика и мала слова, па се уверите да је и је мала а све остало велика. Доступни су сви кодови и ПДФ датотеке које се користе у овом водичу/чланку овде .
који су месеци к3
1. Екстраховање текста из ПДФ датотеке
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())
Излаз горњег програма изгледа овако:
20
PythonBasics
S.R.Doty
August272008
Contents
1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]
Хајде да покушамо да разумемо горњи код у деловима:
reader = PdfReader('example.pdf')
- Овде креирамо објекат од ПдфРеадер класе пипдф модула и проследите путању до ПДФ датотеке и добијете објекат за читање ПДФ-а.
print(len(reader.pages))
- странице својство даје број страница у ПДФ датотеци. На пример, у нашем случају то је 20 (погледајте први ред излаза).
pageObj = reader.pages[0]
- Сада креирамо објекат од ПагеОбјецт класа пипдф модула. ПДФ читач објекат има функцију странице[] који узима број странице (почевши од индекса 0) као аргумент и враћа објекат странице.
print(pageObj.extract_text())
- Објекат странице има функцију екстракт_текста() да бисте издвојили текст са ПДФ странице.
Напомена: Иако су ПДФ датотеке одличне за постављање текста на начин који је људима лак за штампање и читање, софтвер није једноставан за рашчлањивање у обичан текст. Као такав, пипдф може правити грешке приликом издвајања текста из ПДФ-а и чак можда неће моћи да отвори неке ПДФ-ове уопште. Нажалост, не можете много да урадите поводом овога. пипдф можда једноставно неће моћи да ради са неким од ваших конкретних ПДФ датотека.
2. Ротирање ПДФ страница
путовање али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()
Овде можете видети како је прва страница од ротатед_екампле.пдф изгледа као (десна слика) након ротације:

Неке важне тачке у вези са горњим кодом:
- За ротацију прво креирамо објекат за читање ПДФ-а оригиналног ПДФ-а.
writer = PdfWriter()
- Ротиране странице ће бити уписане у нови ПДФ. За писање у ПДФ-ове користимо објекат ПдфВритер класа пипдф модула.
for page in range(len(pdfReader.pages)):
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
- Сада понављамо сваку страницу оригиналног ПДФ-а. Добијамо објекат странице .странице[] метод класе ПДФ читач. Сада ротирамо страницу ротирати() метод класе објекта странице. Затим додамо страницу у ПДФ вритер објекат користећи адд() метод класе ПДФ писача прослеђивањем објекта ротиране странице.
newFile = open(newFileName 'wb')
writer.write(newFile)
newFile.close()
- Сада морамо да запишемо ПДФ странице у нову ПДФ датотеку. Прво отварамо нови објекат датотеке и уписујемо ПДФ странице у њега користећи напиши() метод ПДФ писача објекта. На крају затварамо оригинални објекат ПДФ датотеке и нови објекат датотеке.
3. Спајање ПДФ датотека
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()
Резултат горњег програма је комбиновани ПДФ комбиновани_пример.пдф добијене спајањем пример.пдф и ротатед_екампле.пдф .
стринг.формат у јава
- Хајде да погледамо важне аспекте овог програма:
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)
- На крају записујемо ПДФ странице у излазну ПДФ датотеку користећи писати метод ПДФ писача објекта.
4. Раздвајање ПДФ датотеке
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(startend): 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 = [24] # calling PDFsplit function to split pdf PDFsplit(pdf splits) if __name__ == '__main__': # calling the main function main()
Излаз ће бити три нове ПДФ датотеке са сплит 1 (страна 01) сплит 2 (страна 23) сплит 3 (страна 4-енд) .
Ниједна нова функција или класа није коришћена у горњем питхон програму. Користећи једноставну логику и итерације, креирали смо поделе прослеђеног ПДФ-а према проследјеној листи цепања .
ддл вс дмл
5. Додавање воденог жига на ПДФ странице
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()
Ево како изгледа прва страница оригиналне (лево) и воденог жига (десно) ПДФ датотеке:

- Цео процес је исти као у примеру ротације странице. Једина разлика је:
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])
- Објекат странице се конвертује у објекат странице са воденим жигом помоћу адд_ватермарк() функција.
- Хајде да покушамо да разумемо адд_ватермарк() функција:
reader = PdfReader(wmFile)
pageObj.merge_page(reader.pages[0])
return pageObj
- Пре свега, креирамо објекат за читање ПДФ-а водени жиг.пдф . До пренесеног објекта странице који користимо спајање_страница() функцију и проследите објекат странице прве странице ПДФ читача воденог жига. Ово ће прекрити водени жиг преко објекта странице.
И овде долазимо до краја овог дугачког туторијала о раду са ПДФ датотекама у Питхон-у.
Сада можете лако да креирате сопствени ПДФ менаџер!
Референце:
- хттпс://аутоматетхеборингстуфф.цом/цхаптер13/
- хттпс://пипи.орг/пројецт/пипдф/
Ако вам се свиђа ГеексфорГеекс и желите да допринесете, такође можете да напишете чланак користећи врите.геексфоргеекс.орг или да пошаљете свој чланак на адресу ревиев-теам@геексфоргеекс.орг. Погледајте како се ваш чланак појављује на главној страници ГеексфорГеекс-а и помозите другим штреберима.
Молимо вас да напишете коментаре ако нађете нешто нетачно или ако желите да поделите више информација о теми о којој се расправљало изнад.