Trích xuất hình ảnh từ PDF

Lấy tất cả hình ảnh nhúng từ một PDF và tải xuống riêng lẻ hoặc dưới dạng một .zip. Không tải lên.

Thả PDF vào đây hoặc
  1. Thả PDF hoặc nhấp "duyệt tìm".
  2. Nhấp "Trích xuất hình ảnh" — lưới ảnh thu nhỏ xuất hiện.
  3. Nhấp vào bất kỳ ảnh thu nhỏ nào để tải hình ảnh đó, hoặc "Tải xuống tất cả dưới dạng .zip" cho gói.
  4. Hình ảnh được lưu dưới dạng PNG; mã hóa gốc được giải mã vào canvas trước.
Công cụ này làm gì?

Đi qua mọi trang của PDF, định vị mọi thao tác paintImageXObject, và trích xuất bitmap hình ảnh cơ bản. Mỗi hình ảnh được trích xuất được chuẩn hóa thành PNG qua canvas — nguồn JPEG mất nén ban đầu, nhưng các pixel đầu ra giống với những gì PDF đã render. Hình ảnh được lưu trong các codec không được hỗ trợ (JBIG2, CCITT cho fax, JPX cho JPEG 2000) được báo cáo trong số đếm nhưng không được giải mã — chúng cần các thư viện codec chuyên dụng ngoài pdfjs-dist.

Vấn đề thường gặp

Trích xuất hình ảnh PDF về cơ bản phụ thuộc vào codec. Hầu hết PDFs hoạt động — đây là các mẫu mà việc trích xuất có thể tạo ra kết quả bất ngờ.

  • Codec hình ảnh không được hỗ trợ. JBIG2 (một số tài liệu được quét), CCITT (quét kiểu fax), và JPEG 2000 (JPX) không được giải mã. Dòng trạng thái báo cáo có bao nhiêu cái đã bị bỏ qua. Để trích xuất những cái đó, hãy render qua /pdf-to-images thay vào đó — nó raster hóa toàn bộ trang bao gồm hình ảnh.
  • Mất chất lượng JPEG gốc. Hình ảnh được xuất dưới dạng PNG để bảo toàn độ trong suốt và tránh các tạo tác nén kép. Nếu nguồn của bạn là JPEG được nhúng trong PDF, đầu ra PNG lớn hơn nhưng giống pixel với những gì pdf-lib đã giải mã.
  • Hình ảnh inline bị bỏ sót. Một số PDFs sử dụng dữ liệu hình ảnh inline (toán tử BI/ID/EI) thay vì XObjects — thường là hình ảnh rất nhỏ. v1 không trích xuất những cái này. Hầu hết ảnh và ảnh chụp màn hình là XObjects và được trích xuất chính xác.
  • Cùng một hình ảnh, nhiều lần. PDFs thường tham chiếu một XObject hình ảnh từ nhiều trang. v1 trích xuất hình ảnh một lần cho mỗi cuộc gọi paintImageXObject, vì vậy logo trùng lặp sẽ xuất hiện một lần cho mỗi lần sử dụng. Khử trùng lặp theo tên file hoặc hash nếu cần.
  • PDFs được mã hóa. PDFs được bảo vệ bằng mật khẩu không thể mở mà không có mật khẩu. Hãy chạy chúng qua /pdf-unlock trước nếu bạn có mật khẩu chủ sở hữu.
  • PDFs rất lớn. Mỗi hình ảnh được trích xuất tồn tại trong bộ nhớ trình duyệt cho đến khi bạn xóa hoặc rời đi. PDFs với hàng trăm hình ảnh độ phân giải cao có thể sử dụng hàng trăm MB RAM. Sử dụng tải xuống .zip nhanh chóng và nhấp Xóa khi xong.
Câu hỏi thường gặp

Tại sao hình ảnh của tôi là PNG, không phải JPG?

PNG bảo toàn độ trong suốt và tránh các tạo tác mã hóa lại. Các pixel giống với bản gốc; tệp lớn hơn vì PNG là không mất dữ liệu. Để tiết kiệm dung lượng, hãy chạy kết quả qua /image-compress ở chế độ WebP.

Làm thế nào để biết mỗi hình ảnh đến từ trang nào?

Tên tệp tuân theo mẫu `pageN-imgM.png` — N là số trang nguồn, M là số thứ tự trong trang đó. Sắp xếp theo tên tệp để xem thứ tự chúng xuất hiện trong PDF.

Hình ảnh được mã hóa có ra bị xáo trộn không?

Dữ liệu hình ảnh bên trong một PDF không được mã hóa không được mã hóa riêng — nó giải mã bình thường. Nếu chính PDF được mã hóa, công cụ không thể đọc nó (xem ghi chú PDF được mã hóa ở trên).

Tại sao số đếm cao hơn các hình ảnh có thể nhìn thấy?

Một số PDFs sử dụng nhiều XObjects hình ảnh cho mỗi hình ảnh có thể nhìn thấy (ví dụ: kênh alpha soft-mask được lưu dưới dạng hình ảnh thang xám riêng biệt). v1 trích xuất từng cái — soft-mask là cái làm cho hình ảnh chính trông đúng khi tổng hợp, nhưng tự nó xuất hiện như một hình bóng đen trắng.

PDF của tôi có được tải lên không?

Không. Mọi thứ chạy trong trình duyệt của bạn — PDF được phân tích cú pháp bởi pdfjs-dist và bitmap hình ảnh được render qua canvas, tất cả ở phía client. Không có yêu cầu mạng nào được kích hoạt.

PDF lớn đến mức nào tôi có thể trích xuất?

Lên đến khoảng 100 MB PDF trước khi trình duyệt bắt đầu cảm thấy chậm chạp. Giới hạn cứng là bộ nhớ tab của bạn — nếu trích xuất OOM, hãy chia PDF qua /pdf-split và chạy từng phần riêng biệt.