Chuyển đổi byte pdf thành chuỗi 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 phần cứng/Bộ nhớ của 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ênfile.filename để 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

file.filename = secure_filename[file.filename]
0 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.
file.filename = secure_filename[file.filename]
1 đị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ể xóa 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ó

Khách hàng của bạn đang yêu cầu điều này? . HTML LÀ một chuỗi. PDF KHÔNG phải là một chuỗi. Vì vậy, nó không thể được thực hiện. Bạn không nên giao dịch với khách hàng trừ khi bạn biết đủ về công nghệ bạn đang sử dụng để nói với khách hàng của mình liệu điều họ đang tưởng tượng có thực sự không khả thi hay không

Không, tôi gặp tình huống như tôi phải gửi tệp đính kèm dưới dạng chuỗi và ở đầu bên kia, khách hàng của chúng tôi sẽ nhận chuỗi và chuyển đổi nó thành tệp đính kèm. vì vậy tôi phải chuyển đổi nó thành chuỗi

Thêm giải pháp của bạn ở đây

 B   I   U   S  small BIG code

file.filename = secure_filename[file.filename]
2     &  link [^] encode untab case indent outdent

Xem trước 0

thành viên hiện có

hoặc tham gia với chúng tôi

Tải xuống, Bình chọn, Nhận xét, Xuất bản

Email của bạn

Email này đang được sử dụng. Bạn có cần mật khẩu của bạn?

Mật khẩu tùy chọn

Khi trả lời câu hỏi, vui lòng.

  1. Đọc kỹ câu hỏi.
  2. Hiểu rằng tiếng Anh không phải là ngôn ngữ đầu tiên của mọi người, vì vậy hãy khoan dung với lỗi chính tả và ngữ pháp
  3. Nếu một câu hỏi được diễn đạt kém thì hãy yêu cầu làm rõ, bỏ qua nó hoặc chỉnh sửa câu hỏi và khắc phục sự cố. Xúc phạm không được chào đón
  4. Đừng bảo ai đó đọc hướng dẫn. Rất có thể họ có và không nhận được. Đưa ra câu trả lời hoặc chuyển sang câu hỏi tiếp theo
Let's work to help developers, not make them feel stupid.


Nội dung này, cùng với bất kỳ tệp và mã nguồn liên quan nào, được cấp phép theo Giấy phép Mở Dự án Code [CPOL]

Chủ Đề