Усі ви повинні знати, що таке PDF-файли. Насправді вони є одними з найважливіших і широко використовуваних цифрових засобів масової інформації. PDF означає Портативний формат документа . Це використовує .pdf розширення. Він використовується для надійного представлення та обміну документами незалежно від програмного забезпечення чи операційної системи.
Винайдено Adobe Зараз PDF є відкритим стандартом, який підтримує Міжнародна організація стандартизації (ISO). PDF-файли можуть містити посилання та кнопки, аудіо, відео та бізнес-логіку.
У цій статті ми дізнаємося, як ми можемо виконувати різні операції, наприклад:
- Вилучення тексту з PDF
- Обертання сторінок PDF
- Об'єднання PDF-файлів
- Розбиття PDF
- Додавання водяного знака на сторінки PDF
Установка: Використання простих скриптів python!
Ми будемо використовувати сторонній модуль pypdf.
pypdf — це бібліотека Python, створена як інструментарій PDF. Він здатний:
- Отримання інформації про документ (автор назви…)
- Розбиття документів сторінка за сторінкою
- Об’єднання документів сторінка за сторінкою
- Обрізка сторінок
- Об’єднання кількох сторінок в одну
- Шифрування та дешифрування файлів PDF
- і більше!
Щоб інсталювати pypdf, виконайте таку команду з командного рядка:
pip install pypdfЦя назва модуля чутлива до регістру, тому переконайтеся, що і є малими літерами, а все інше – великими. Увесь код і PDF-файли, використані в цьому посібнику/статті, доступні тут .
повторювати карту Java
1. Вилучення тексту з файлу 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())
Вихід вищезазначеної програми виглядає так:
20
PythonBasics
S.R.Doty
August272008
Contents
1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]
Давайте спробуємо зрозуміти наведений вище код частинами:
reader = PdfReader('example.pdf')
- Тут ми створюємо об’єкт PdfReader класу модуля pypdf і передати шлях до файлу PDF і отримати об’єкт читача PDF.
print(len(reader.pages))
- сторінки властивість визначає кількість сторінок у файлі PDF. Наприклад, у нашому випадку це 20 (див. перший рядок виводу).
pageObj = reader.pages[0]
- Тепер ми створюємо об'єкт PageObject клас модуля pypdf. Об’єкт читання PDF має функцію сторінки[] який приймає номер сторінки (починаючи з індексу 0) як аргумент і повертає об’єкт сторінки.
print(pageObj.extract_text())
- Об'єкт сторінки має функцію extract_text() щоб отримати текст зі сторінки PDF.
Примітка: Хоча PDF-файли чудово підходять для розміщення тексту таким чином, щоб людям було легко його друкувати та читати, програмному забезпеченню непросто розібрати їх у відкритий текст. Таким чином, pypdf може робити помилки під час видобування тексту з PDF-файлу і навіть може взагалі не відкривати деякі PDF-файли. На жаль, ви не так багато можете зробити. pypdf може просто не працювати з деякими з ваших PDF-файлів.
inkscape проти gimp
2. Обертання сторінок PDF
# 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()
Тут ви можете побачити, як виглядає перша сторінка rotated_example.pdf виглядає так (праве зображення) після повороту:

панда тане
Деякі важливі моменти, пов’язані з наведеним вище кодом:
- Для обертання ми спочатку створюємо об’єкт читання PDF оригінального PDF.
writer = PdfWriter()
- Повернуті сторінки будуть записані в новий PDF-файл. Для запису в PDF ми використовуємо об’єкт of PdfWriter клас модуля pypdf.
for page in range(len(pdfReader.pages)):
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
- Тепер ми повторюємо кожну сторінку оригінального PDF-файлу. Ми отримуємо об'єкт сторінки .pages[] метод класу PDF reader. Тепер ми повертаємо сторінку на обертати () метод класу об'єктів сторінки. Потім ми додаємо сторінку до об’єкта PDF writer за допомогою додати() метод класу запису PDF шляхом передачі об’єкта повернутої сторінки.
newFile = open(newFileName 'wb')
writer.write(newFile)
newFile.close()
- Тепер нам потрібно записати PDF-сторінки в новий PDF-файл. Спочатку ми відкриваємо новий файловий об’єкт і записуємо до нього сторінки PDF за допомогою написати() метод об'єкта запису PDF. Нарешті ми закриваємо оригінальний об’єкт PDF-файлу та новий об’єкт файлу.
3. Об'єднання файлів 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()
Результатом роботи зазначеної вище програми є комбінований PDF-файл об'єднаний_приклад.pdf отримані шляхом злиття приклад.pdf і rotated_example.pdf .
- Давайте розглянемо важливі аспекти цієї програми:
pdfWriter = PdfWriter()- Для злиття ми використовуємо попередньо зібраний клас PdfWriter модуля pypdf.
Тут ми створюємо об'єкт pdfwriter класу PDF writer
# appending pdfs one by one
for pdf in pdfs:
pdfWriter.append(pdf)
- Тепер ми додаємо об’єкт-файл кожного PDF-файлу до об’єкта запису PDF-файлів за допомогою додати() метод.
# writing combined pdf to output pdf file
with open(output 'wb') as f:
pdfWriter.write(f)
- Нарешті ми записуємо сторінки PDF у вихідний файл PDF за допомогою писати метод об'єкта запису PDF.
4. Розбиття файлу 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(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()
На виході будуть три нові PDF-файли з частина 1 (сторінка 01) частина 2 (сторінка 23) частина 3 (сторінка 4-кінець) .
У наведеній вище програмі на Python не було використано жодної нової функції чи класу. Використовуючи просту логіку та ітерації, ми створили розділення пройдених PDF відповідно до списку пройдених розколюється .
java сортування списку
5. Додавання водяного знака на сторінки 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()
Ось як виглядає перша сторінка оригінального (ліворуч) і водяного знака (праворуч) PDF-файлу:

- Весь процес такий самий, як у прикладі ротації сторінки. Єдина різниця:
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])
- Об’єкт сторінки перетворюється на об’єкт сторінки з водяним знаком за допомогою add_watermark() функція.
- Давайте спробуємо розібратися add_watermark() функція:
reader = PdfReader(wmFile)
pageObj.merge_page(reader.pages[0])
return pageObj
- Перш за все ми створюємо об’єкт для читання PDF водяний знак.pdf . До переданого об'єкта сторінки використовуємо merge_page() і передати об’єкт сторінки першої сторінки об’єкта читача PDF із водяним знаком. Це накладе водяний знак на переданий об’єкт сторінки.
І ось ми підійшли до кінця цього довгого посібника з роботи з PDF-файлами в Python.
Тепер ви можете легко створити власний PDF-менеджер!
Література:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Якщо вам подобається GeeksforGeeks і ви хочете зробити свій внесок, ви також можете написати статтю за допомогою write.geeksforgeeks.org або надіслати свою статтю на адресу [email protected]. Перегляньте свою статтю на головній сторінці GeeksforGeeks і допоможіть іншим гікам.
Будь ласка, пишіть коментарі, якщо ви знайшли щось невірне або якщо ви хочете поділитися додатковою інформацією про тему, розглянуту вище.