Tất cả các bạn phải quen thuộc với PDF là gì. Trên thực tế, chúng là một trong những phương tiện kỹ thuật số quan trọng nhất và được sử dụng rộng rãi. PDF là viết tắt của Định dạng Tài liệu Di động . Nó sử dụng phần mở rộng .pdf . Nó được sử dụng để trình bày và trao đổi tài liệu một cách đáng tin cậy, không phụ thuộc vào phần mềm, phần cứng hoặc hệ điều hành.
Được phát minh bởi Adobe , PDF hiện là một tiêu chuẩn mở được duy trì bởi Tổ chức Tiêu chuẩn hoá Quốc tế (ISO). Các tệp PDF có thể chứa các liên kết và nút, trường biểu mẫu, âm thanh, video và logic nghiệp vụ.
Trong bài viết này, chúng ta sẽ tìm hiểu, cách chúng ta có thể thực hiện các thao tác khác nhau như:
- Trích xuất văn bản từ PDF
- Xoay các trang PDF
- Hợp nhất các tệp PDF
- Tách PDF
- Thêm hình mờ vào các trang PDF
bằng cách sử dụng các tập lệnh python đơn giản!
Cài đặt
Chúng tôi sẽ sử dụng mô-đun của bên thứ ba, PyPDF2.
PyPDF2 là một thư viện python được xây dựng dưới dạng bộ công cụ PDF. Nó có khả năng:
- Trích xuất thông tin tài liệu (tiêu đề, tác giả,…)
- Tách từng trang tài liệu
- Hợp nhất tài liệu từng trang
- Cắt trang
- Hợp nhất nhiều trang thành một trang duy nhất
- Mã hóa và giải mã các tệp PDF
- và hơn thế nữa!
Để cài đặt PyPDF2, hãy chạy lệnh sau từ dòng lệnh:
pip install PyPDF2
1. Trích xuất văn bản từ tệp PDF
# importing required modules
import
PyPDF2
# creating a pdf file object
pdfFileObj
=
open
(
'example.pdf'
,
'rb'
)
# creating a pdf reader object
pdfReader
=
PyPDF2.PdfFileReader(pdfFileObj)
# printing number of pages in pdf file
print
(pdfReader.numPages)
# creating a page object
pageObj
=
pdfReader.getPage(
0
)
# extracting text from page
print
(pageObj.extractText())
# closing the pdf file object
pdfFileObj.close()
Kết quả của chương trình trên có dạng như sau:
20
PythonBasics
SRDoty
27 tháng 8, 2008
Nội dung
1
4
1.1WhatisPython? ................................... ..
4
1.2 Cài đặt và tài liệu ... .........
4 [và một số dòng khác ...]
Hãy để chúng tôi cố gắng hiểu đoạn mã trên theo từng phần:
- pdfFileObj = open (‘example.pdf’, ‘rb’) Chúng tôi đã mở example.pdf ở chế độ nhị phân. và lưu đối tượng tệp dưới dạng pdfFileObj .
- pdfReader = PyPDF2.PdfFileReader (pdfFileObj) Ở đây, chúng ta tạo một đối tượng thuộc lớp PdfFileReader của mô-đun PyPDF2 và truyền đối tượng tệp pdf & lấy đối tượng trình đọc pdf.
- in (pdfReader.numPages) Thuộc tính numPages cung cấp số lượng trang trong tệp pdf. Ví dụ, trong trường hợp của chúng tôi, nó là 20 (xem dòng đầu tiên của đầu ra).
- pageObj = pdfReader.getPage (0) Bây giờ, chúng ta tạo một đối tượng của PageObject lớp module PyPDF2. Đối tượng trình đọc pdf có hàm getPage () lấy số trang (bắt đầu từ chỉ mục 0) làm đối số và trả về đối tượng trang.
- print (pageObj.extractText ()) Đối tượng trang có hàm extractText () để trích xuất văn bản từ trang pdf.
- pdfFileObj.close () Cuối cùng, chúng tôi đóng đối tượng tệp pdf.
Lưu ý: Mặc dù các tệp PDF rất tuyệt vời để sắp xếp văn bản theo cách dễ dàng cho mọi người in và đọc, chúng không đơn giản để phần mềm phân tích cú pháp thành văn bản rõ. Do đó, PyPDF2 có thể mắc lỗi khi trích xuất văn bản từ PDF và thậm chí có thể không mở được một số tệp PDF. Thật không may, bạn không thể làm gì nhiều về điều này. PyPDF2 có thể đơn giản là không thể hoạt động với một số tệp PDF cụ thể của bạn. tuyển sinh cao đẳng dược
2. Xoay các trang PDF
# importing the required modules
import
PyPDF2
def
PDFrotate(origFileName, newFileName, rotation):
# creating a pdf File object of original pdf
pdfFileObj
=
open
(origFileName,
'rb'
)
# creating a pdf Reader object
pdfReader
=
PyPDF2.PdfFileReader(pdfFileObj)
# creating a pdf writer object for new pdf
pdfWriter
=
PyPDF2.PdfFileWriter()
# rotating each page
for
page
in
range
(pdfReader.numPages):
# creating rotated page object
pageObj
=
pdfReader.getPage(page)
pageObj.rotateClockwise(rotation)
# adding rotated page object to pdf writer
pdfWriter.addPage(pageObj)
# new pdf file object
newFile
=
open
(newFileName,
'wb'
)
# writing rotated pages to new file
pdfWriter.write(newFile)
# closing the original pdf file object
pdfFileObj.close()
# 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()
Tại đây, bạn có thể thấy trang đầu tiên của rotated_example.pdf trông như thế nào (hình ảnh bên phải) sau khi xoay:
Một số điểm quan trọng liên quan đến mã trên:
- Để xoay, trước tiên chúng ta tạo đối tượng trình đọc pdf của pdf gốc.
- pdfWriter = PyPDF2.PdfFileWriter () Các trang được xoay sẽ được ghi sang một pdf mới. Đối với văn bản cho file PDF, chúng tôi sử dụng đối tượng của PdfFileWriter lớp module PyPDF2.
- cho trang trong phạm vi (pdfReader.numPages): pageObj = pdfReader.getPage (trang) pageObj.rotateClockwise (xoay) pdfWriter.addPage (pageObj) Bây giờ, chúng tôi lặp lại từng trang của pdf gốc. Chúng ta lấy đối tượng trang bằng phương thức getPage () của lớp trình đọc pdf. Bây giờ, chúng ta xoay trang bằng phương thức xoayClockwise () của lớp đối tượng trang. Sau đó, chúng ta thêm trang vào đối tượng người viết pdf bằng cách sử dụng phương thức addPage () của lớp người viết pdf bằng cách chuyển đối tượng trang đã xoay.
- newFile = open (newFileName, ‘wb’) pdfWriter.write (newFile) pdfFileObj.close () newFile.close () Bây giờ, chúng ta phải ghi các trang pdf sang một tệp pdf mới. Đầu tiên chúng ta mở đối tượng tệp mới và ghi các trang pdf vào nó bằng phương thức write () của đối tượng pdf writer. Cuối cùng, chúng tôi đóng đối tượng tệp pdf ban đầu và đối tượng tệp mới.
Một số điểm quan trọng liên quan đến mã trên:
- Để xoay, trước tiên chúng ta tạo đối tượng trình đọc pdf của pdf gốc.
- pdfWriter = PyPDF2.PdfFileWriter () Các trang được xoay sẽ được ghi sang một pdf mới. Đối với văn bản cho file PDF, chúng tôi sử dụng đối tượng của PdfFileWriter lớp module PyPDF2.
- cho trang trong phạm vi (pdfReader.numPages): pageObj = pdfReader.getPage (trang) pageObj.rotateClockwise (xoay) pdfWriter.addPage (pageObj) Bây giờ, chúng tôi lặp lại từng trang của pdf gốc. Chúng ta lấy đối tượng trang bằng phương thức getPage () của lớp trình đọc pdf. Bây giờ, chúng ta xoay trang bằng phương thức xoayClockwise () của lớp đối tượng trang. Sau đó, chúng ta thêm trang vào đối tượng người viết pdf bằng cách sử dụng phương thức addPage () của lớp người viết pdf bằng cách chuyển đối tượng trang đã xoay.
- newFile = open (newFileName, ‘wb’) pdfWriter.write (newFile) pdfFileObj.close () newFile.close () Bây giờ, chúng ta phải ghi các trang pdf sang một tệp pdf mới. Đầu tiên chúng ta mở đối tượng tệp mới và ghi các trang pdf vào nó bằng phương thức write () của đối tượng pdf writer. Cuối cùng, chúng tôi đóng đối tượng tệp pdf ban đầu và đối tượng tệp mới.
3. Hợp nhất các tệp PDF
# importing required modules
import
PyPDF2
def
PDFmerge(pdfs, output):
# creating pdf file merger object
pdfMerger
=
PyPDF2.PdfFileMerger()
# appending pdfs one by one
for
pdf
in
pdfs:
with
open
(pdf,
'rb'
) as f:
pdfMerger.append(f)
# 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()
Đầu ra của chương trình trên là một pdf kết hợp , merge_example.pdf thu được bằng cách hợp nhất example.pdf và rotated_example.pdf .
Hãy để chúng tôi xem xét các khía cạnh quan trọng của chương trình này:
- pdfMerger = PyPDF2.PdfFileMerger () Để hợp nhất, chúng tôi sử dụng một lớp được tạo sẵn, PdfFileMerger của mô-đun PyPDF2.
Ở đây, chúng tôi tạo một đối tượng pdfMerger của lớp hợp nhất pdf - cho pdf trong pdf: với open (pdf, ‘rb’) là f: pdfMerger.append (f) Bây giờ, chúng tôi nối đối tượng tệp của mỗi đối tượng hợp nhất pdf sang pdf bằng cách sử dụng phương thức append () .
- với mở (đầu ra, ‘wb’) là f: pdfMerger.write (f) Cuối cùng, chúng tôi ghi các trang pdf vào tệp pdf đầu ra bằng cách sử dụng phương pháp ghi của đối tượng hợp nhất pdf.
4. Tách tệp PDF
# importing the required modules
import
PyPDF2
def
PDFsplit(pdf, splits):
# creating input pdf file object
pdfFileObj
=
open
(pdf,
'rb'
)
# creating pdf reader object
pdfReader
=
PyPDF2.PdfFileReader(pdfFileObj)
# 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
pdfWriter
=
PyPDF2.PdfFileWriter()
# output pdf file name
outputpdf
=
pdf.split(
'.pdf'
)[
0
]
+
str
(i)
+
'.pdf'
# adding pages to pdf writer object
for
page
in
range
(start,end):
pdfWriter.addPage(pdfReader.getPage(page))
# writing split pdf pages to pdf file
with
open
(outputpdf,
"wb"
) as f:
pdfWriter.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
=
pdfReader.numPages
# closing the input pdf file object
pdfFileObj.close()
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()
Đầu ra sẽ là ba tệp PDF mới với phần chia 1 (trang 0,1), phần chia 2 (trang 2,3), phần chia 3 (trang 4-cuối) .
Không có hàm hoặc lớp mới nào được sử dụng trong chương trình python ở trên. Sử dụng logic và lặp lại đơn giản, chúng tôi đã tạo các phần tách của pdf đã chuyển theo các phần tách danh sách đã chuyển .
5. Thêm hình mờ vào các trang PDF
# importing the required modules
import
PyPDF2
def
add_watermark(wmFile, pageObj):
# opening watermark pdf file
wmFileObj
=
open
(wmFile,
'rb'
)
# creating pdf reader object of watermark pdf file
pdfReader
=
PyPDF2.PdfFileReader(wmFileObj)
# merging watermark pdf's first page with passed page object.
pageObj.mergePage(pdfReader.getPage(
0
))
# closing the watermark pdf file object
wmFileObj.close()
# 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
pdfReader
=
PyPDF2.PdfFileReader(pdfFileObj)
# creating a pdf writer object for new pdf
pdfWriter
=
PyPDF2.PdfFileWriter()
# adding watermark to each page
for
page
in
range
(pdfReader.numPages):
# creating watermarked page object
wmpageObj
=
add_watermark(mywatermark, pdfReader.getPage(page))
# adding watermarked page object to pdf writer
pdfWriter.addPage(wmpageObj)
# new pdf file object
newFile
=
open
(newFileName,
'wb'
)
# writing watermarked pages to new file
pdfWriter.write(newFile)
# closing the original pdf file object
pdfFileObj.close()
# closing the new pdf file object
newFile.close()
if
__name__
=
=
"__main__"
:
# calling the main function
main()