Đọc pdf dưới dạng byte python

Bài viết này sẽ hướng dẫn bạn một kỹ thuật chuyển đổi tệp PDF sang tệp hình ảnh PNG. Vấn đề mà bài viết này nhằm giải quyết là một người không muốn lưu trữ bất kỳ dữ liệu nào trên hệ thống của mình trong quá trình chuyển đổi

Hệ thống mà chuyển đổi xảy ra không lưu trữ bất cứ thứ gì. Điều này rất quan trọng đối với nhà phát triển vì ví dụ như trong API nằm trong máy chủ, tài nguyên lưu trữ/phần cứng máy chủ cần được sử dụng hiệu quả. Nó không nên được sử dụng để kết xuất dữ liệu vô ích. Vì mã không lưu trữ bất cứ thứ gì trên hệ thống gốc nên không có bộ nhớ nào được sử dụng trong khi đạt được chuyển đổi

Sau khi dành nhiều thời gian trên internet và sau đó kiểm tra mã của mình, tôi đã tìm ra giải pháp

Bộ luật và giải thích của nó
  1. Lưu trữ tệp trong một biến trong python. Tệp của tôi đến từ mạng, do đó tôi sử dụng yêu cầu để truy cập tệp đã tải lên
file = request.files["file"]

2. Trích xuất tên tệp từ tệp. Tài liệu warkzeug yêu cầu rõ ràng gọi hàm bảo mật trên_______91_______ để nhận phiên bản bảo mật của tên tệp

file.filename = secure_filename[file.filename]

3. Nhập gói pdf2image và chuyển đổi byte pdf thành byte giá trị RGB bằng cách gọi hàm do gói pdf2image cung cấp. Đây là một chuyển đổi byte sang byte. Cho đến nay, chúng tôi không nhận được thực tế. hình ảnh định dạng png

from pdf2image import convert_from_bytespages = convert_from_bytes[file.read[]]

4. Tạo một đối tượng trong bộ nhớ đệm và lưu tệp dưới dạng. png trong bộ đệm trong bộ nhớ

Chúng ta cần xác định bộ đệm trong bộ nhớ có thể lưu trữ byte. Cái này giống như biến python lưu trữ dữ liệu nhưng ở đây kiểu dữ liệu là ‘byte’. Bạn không thể lưu trữ nó bình thường bằng cách chỉ xác định một biến

Một cách khác để lưu trữ trong bộ nhớ là ghi byte vào một tệp, nhưng tệp đó sẽ được lưu trên máy tính của bạn. Hãy tưởng tượng nếu API này được gọi 100 lần và các tệp 5 MB được cung cấp mỗi lần, bạn sẽ lãng phí 500Mb dung lượng ổ đĩa

for page in pages:   in_mem_file = io.BytesIO[]   page.save[in_mem_file , format = "png"]   in_mem_file.seek[0]break

page.save[] chuyển đổi các byte trong trang thành các byte có định dạng png và lưu các byte đó trong biến in-mem. .seek[0] định vị lại con trỏ byte để trỏ lại đầu mảng

Khi

file.filename = secure_filename[file.filename]
0 được gọi , con trỏ điền vào
file.filename = secure_filename[file.filename]
1 đã đạt đến cuối độ dài của nó, do đó khi chúng ta sẽ đọc nó; . Nếu chúng tôi không định vị lại, sẽ không có byte nào được đọc. Vì một con trỏ duy nhất thực hiện cả thao tác ghi và đọc nên chúng ta cần quản lý nó theo cách thủ công

Giờ đây, bạn có thể gửi lại các byte hình ảnh png trong mạng đến một nơi khác hoặc bạn có thể lưu trữ nó trên hệ thống của mình bằng cách sử dụng thêm một vài dòng mã

Vòng lặp for được sử dụng vì đối tượng pages là một đối tượng có thể lặp lại. Điều này có nghĩa là nếu pdf của bạn có nhiều trang thì tất cả chúng sẽ được lưu trữ trong các trang. Các trang hoạt động giống như một danh sách trong đó mỗi chỉ mục chứa một trang

Tôi đã sử dụng ngắt để dừng chuyển đổi khi hoàn thành 1 trang. Bạn có thể loại bỏ câu lệnh break, nhưng hãy nhớ xử lý

file.filename = secure_filename[file.filename]
1 và ngăn vòng lặp for ghi đè lên nó

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 và được sử dụng rộng rãi nhất. 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, độc lập với phần mềm, phần cứng hoặc hệ điều hành

Chúng tôi sẽ trích xuất văn bản từ tệp pdf bằng hai thư viện Python, PyPDF và PyMuPDF, trong bài viết này.  

Trích xuất văn bản từ tệp PDF bằng thư viện PyPDF

Gói Python PyPDF có thể được sử dụng để đạt được những gì chúng ta muốn [trích xuất văn bản], mặc dù nó có thể làm được nhiều hơn những gì chúng ta cần. Gói này cũng có thể được sử dụng để tạo, giải mã và hợp nhất các tệp PDF. Ghi chú. Để biết thêm thông tin, tham khảo Làm việc với tệp PDF trong Python

Cài đặt

Để cài đặt gói này, gõ lệnh dưới đây trong thiết bị đầu cuối

pip install PyPDF2

Ví dụ. Nhập PDF.

 

Python3




# importing required modules

import PyPDF2

pdfFileObj = open['example.pdf', 'rb']
0

pdfFileObj = open['example.pdf', 'rb']
1

pdfFileObj = open['example.pdf', 'rb']
2
pdfFileObj = open['example.pdf', 'rb']
3
pdfFileObj = open['example.pdf', 'rb']
4_______8_______5_______8_______6
pdfFileObj = open['example.pdf', 'rb']
7
pdfFileObj = open['example.pdf', 'rb']
8
pdfFileObj = open['example.pdf', 'rb']
9

pdfFileObj = open['example.pdf', 'rb']
0

pdfReader = PyPDF2.PdfFileReader[pdfFileObj]
1

pdfReader = PyPDF2.PdfFileReader[pdfFileObj]
2_______8_______3
pdfReader = PyPDF2.PdfFileReader[pdfFileObj]
4

pdfFileObj = open['example.pdf', 'rb']
0

pdfReader = PyPDF2.PdfFileReader[pdfFileObj]
6

pdfReader = PyPDF2.PdfFileReader[pdfFileObj]
7
pdfReader = PyPDF2.PdfFileReader[pdfFileObj]
8

pdfFileObj = open['example.pdf', 'rb']
0

print[pdfReader.numPages]
0

print[pdfReader.numPages]
1
pdfFileObj = open['example.pdf', 'rb']
3
print[pdfReader.numPages]
3
print[pdfReader.numPages]
4
pdfFileObj = open['example.pdf', 'rb']
9

pdfFileObj = open['example.pdf', 'rb']
0

print[pdfReader.numPages]
7

pdfReader = PyPDF2.PdfFileReader[pdfFileObj]
7
print[pdfReader.numPages]
9

pdfFileObj = open['example.pdf', 'rb']
0

pageObj = pdfReader.getPage[0]
1

pageObj = pdfReader.getPage[0]
2

Đầu ra.

Chúng ta hãy cố gắng hiểu đoạn mã trên.

________số 8_______
  • Chúng tôi đã mở ví dụ. 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 tôi tạo một đối tượng thuộc lớp PdfFileReader của mô-đun PyPDF2 và  chuyển đối tượng tệp pdf và nhận đối tượng trình đọc pdf
print[pdfReader.numPages]
  • Thuộc tính numPages cung cấp số 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 kết quả]
pageObj = pdfReader.getPage[0]
  • Bây giờ, chúng ta tạo một đối tượng thuộc lớp PageObject của mô-đun PyPDF2. đối tượng trình đọc pdf có hàm getPage[] lấy số trang [bắt đầu từ chỉ mục biểu mẫu 0] ​​làm đối số và trả về đối tượng trang
print[pageObj.extractText[]]
  • Đối tượng trang có chức năng 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

Trích xuất văn bản từ tệp PDF bằng thư viện PyMuPDF

PyMuPDF là thư viện Python hỗ trợ các định dạng tệp như XPS, PDF, CBR và CBZ. Nhưng hiện tại, trong bài viết này, chúng tôi sẽ tập trung vào các tệp PDF [Định dạng Tài liệu Di động]

Cài đặt

Python3




pageObj = pdfReader.getPage[0]
3_______8_______3
pdfFileObj = open['example.pdf', 'rb']
3
pageObj = pdfReader.getPage[0]
6
pageObj = pdfReader.getPage[0]
7
pageObj = pdfReader.getPage[0]
8

Trong khi tôi đang viết bài này, 1. 16. 14 là phiên bản hiện tại của thư viện PyMuPDF

Để trích xuất văn bản từ pdf, chúng ta cần làm theo các bước sau

  1. Nhập thư viện
  2. văn bản mở đầu
  3. Trích xuất văn bản

Ghi chú. Chúng tôi đang sử dụng mẫu. pdf tại đây; .  

https. //www. châu phi. edu/hình ảnh/mặc định/mẫu. pdf - mẫu. pdf

1. Nhập thư viện

Python3




import

print[pageObj.extractText[]]
0

2. văn bản mở đầu

Python3




print[pageObj.extractText[]]
1
pdfFileObj = open['example.pdf', 'rb']
3
print[pageObj.extractText[]]
3
pdfFileObj = open['example.pdf', 'rb']
4
pdfFileObj = open['example.pdf', 'rb']
5
print[pageObj.extractText[]]
6
pdfFileObj = open['example.pdf', 'rb']
9

Ở đây, chúng tôi đã tạo một đối tượng có tên là “doc” và tên tệp phải là một chuỗi Python

3. Trích xuất văn bản

Python3




print[pageObj.extractText[]]
8
print[pageObj.extractText[]]
9
pdfFileObj.close[]
0
pdfFileObj.close[]
1

pdfFileObj = open['example.pdf', 'rb']
0_______46_______3
pdfFileObj = open['example.pdf', 'rb']
3
pdfFileObj.close[]
5

pdfFileObj = open['example.pdf', 'rb']
0_______19_______7
pdfFileObj.close[]
8

Ở đây, chúng tôi lặp lại các trang trong pdf và sử dụng phương thức get_text[] để trích xuất từng trang từ tệp

Tất cả Mã để trích xuất văn bản

Python3




import

print[pageObj.extractText[]]
0

print[pageObj.extractText[]]
1
pdfFileObj = open['example.pdf', 'rb']
3
print[pageObj.extractText[]]
3
pdfFileObj = open['example.pdf', 'rb']
4
pdfFileObj = open['example.pdf', 'rb']
5
print[pageObj.extractText[]]
6
pdfFileObj = open['example.pdf', 'rb']
9

pdfFileObj.close[]
3_______8_______3 import0

print[pageObj.extractText[]]
8
print[pageObj.extractText[]]
9
pdfFileObj.close[]
0
pdfFileObj.close[]
1

import5

pdfFileObj.close[]
3import7
pdfFileObj = open['example.pdf', 'rb']
3
pdfFileObj.close[]
5

pdfReader = PyPDF2.PdfFileReader[pdfFileObj]
7
pdfFileObj.close[]
8

đầu ra

 

Phần kết luận

Chúng tôi đã thấy hai thư viện Python, PyPDF và PyMuPDF, có thể trích xuất văn bản từ tệp PDF. Nhận xét về thư viện ưa thích của bạn từ hai thư viện trên

Bạn có thể phân tích cú pháp PDF bằng Python không?

Nó có trình phân tích cú pháp PDF mở rộng có thể được sử dụng cho các mục đích khác ngoài phân tích văn bản. PyPDF2 là một thư viện PDF thuần Python có khả năng tách, hợp nhất với nhau, cắt xén và chuyển đổi các trang của tệp PDF . Nó cũng có thể thêm dữ liệu tùy chỉnh, tùy chọn xem và mật khẩu vào tệp PDF.

Python có thể làm việc với PDF để trích xuất dữ liệu không?

Có một vài thư viện Python mà bạn có thể trích xuất dữ liệu từ tệp PDF . Ví dụ: bạn có thể sử dụng thư viện PyPDF2 để trích xuất văn bản từ các tệp PDF trong đó văn bản ở dạng tuần tự hoặc được định dạng. e. trong dòng hoặc hình thức. Bạn cũng có thể trích xuất các bảng trong tệp PDF thông qua thư viện Camelot.

Làm cách nào để đọc PDF từ liên kết trong Python?

Chúng tôi sẽ làm theo các bước sau để trích xuất các siêu liên kết từ PDF, .
Cài đặt PyPDF2 trong máy cục bộ bằng cách gõ pip install PyPDF2 trong lệnh shell
Nhập PyPDF2
Mở tệp ở chế độ Nhị phân và nó nhận ra mẫu URL trong tệp
Xác định chức năng trích xuất liên kết cho một trang cụ thể

Python lưu trữ dữ liệu theo byte như thế nào?

Các đối tượng byte có thể được xây dựng từ hàm tạo, byte[] và từ các ký tự; . b'trăn' . Để xây dựng các mảng byte, hãy sử dụng hàm bytearray[].

Chủ Đề