Thư viện fitz
là tên module của PyMuPDF — một thư viện Python mạnh mẽ và hiệu suất cao dùng để xử lý tài liệu PDF, XPS và EPUB. Dưới đây là phần giới thiệu chi tiết:
📘 Giới thiệu về fitz
(PyMuPDF)
✅ Tổng quan
fitz
là tên module nội bộ của PyMuPDF, một thư viện Python chuyên dùng để:- Đọc và ghi file PDF.
- Trích xuất văn bản, hình ảnh, metadata.
- Chỉnh sửa trang, thêm chú thích, hợp nhất hoặc tách tài liệu.
- Chuyển đổi PDF sang hình ảnh chất lượng cao.
⚡ Ưu điểm nổi bật
- Hiệu suất cao: Dựa trên thư viện MuPDF viết bằng C, xử lý nhanh và nhẹ.
- Đa năng: Hỗ trợ nhiều định dạng (PDF, XPS, EPUB).
- Dễ dùng: API trực quan, dễ tích hợp vào các ứng dụng Python.
🔧 Cài đặt
pip install PyMuPDF
🧪 Ví dụ sử dụng cơ bản
import fitz # nhập thư viện
doc = fitz.open("example.pdf") # mở file PDF
page = doc[0] # lấy trang đầu tiên
text = page.get_text() # trích xuất văn bản
images = page.get_images(full=True) # lấy danh sách ảnh
🧩 Các tính năng chính
Tính năng | Mô tả |
---|---|
get_text() | Trích xuất văn bản từ trang PDF |
get_images() | Lấy danh sách ảnh nhúng trong trang |
insert_text() | Thêm văn bản vào trang PDF |
new_page() | Tạo trang mới trong tài liệu |
save() | Lưu tài liệu PDF sau khi chỉnh sửa |
search_for() | Tìm kiếm văn bản bằng biểu thức chính quy |
metadata | Truy cập thông tin metadata của tài liệu (tác giả, tiêu đề, số trang) |
Ví dụ 1: convert pdf sang jpg và chỉ giữ nửa trái mỗi ảnh
Trong ví dụ này, chúng ta sẽ
- Mở một file PDF.
- Trích xuất tất cả hình ảnh từ từng trang.
- Cắt nửa bên trái của mỗi hình ảnh.
- Lưu hình ảnh đã cắt vào một thư mục chỉ định.
import fitz # PyMuPDF: thư viện để xử lý file PDF
from PIL import Image # Thư viện xử lý ảnh
import io # Dùng để xử lý dữ liệu dạng byte
import os # Dùng để thao tác với hệ thống file
🔧 Thiết lập đường dẫn
pdf_path = r"C:\Users\hehe\bbo.pdf"
output_folder = r"C:\Users\hehe\3img"
pdf_path
: đường dẫn đến file PDF cần xử lý.output_folder
: thư mục nơi lưu ảnh sau khi trích xuất.
os.makedirs(output_folder, exist_ok=True)
- Tạo thư mục lưu ảnh nếu chưa tồn tại (
exist_ok=True
giúp tránh lỗi nếu thư mục đã có).
📄 Trích xuất ảnh từ PDF
doc = fitz.open(pdf_path)
- Mở file PDF bằng PyMuPDF.
for page_index in range(len(doc)):
page = doc[page_index]
images = page.get_images(full=True)
- Lặp qua từng trang trong PDF.
get_images(full=True)
lấy tất cả ảnh trên trang (bao gồm ảnh nhúng).
🖼️ Xử lý từng ảnh
for img_index, img in enumerate(images):
xref = img[0]
base_image = doc.extract_image(xref)
image_bytes = base_image["image"]
xref
: ID nội bộ của ảnh trong PDF.extract_image(xref)
: trích xuất ảnh dưới dạng byte.image_bytes
: dữ liệu ảnh gốc.
image = Image.open(io.BytesIO(image_bytes))
width, height = image.size
left_half = image.crop((0, 0, width // 2, height))
- Mở ảnh từ dữ liệu byte.
- Lấy kích thước ảnh.
- Cắt nửa bên trái của ảnh (
crop
với tọa độ từ trái sang giữa).
💾 Lưu ảnh
filename = f"{page_index+1}.jpg"
save_path = os.path.join(output_folder, filename)
left_half.save(save_path, format="JPEG")
- Đặt tên file theo số trang (ví dụ:
1.jpg
,2.jpg
…). - Lưu ảnh đã cắt vào thư mục chỉ định.
✅ Thông báo hoàn tất
print(f"✅ Images saved to {output_folder}")
- In ra thông báo khi hoàn tất xử lý.
Toàn bộ code:
import fitz # PyMuPDF: thư viện để xử lý file PDF
from PIL import Image # Thư viện xử lý ảnh
import io # Dùng để xử lý dữ liệu dạng byte
import os # Dùng để thao tác với hệ thống file
pdf_path = r"C:\Users\hehe\bbo.pdf"
output_folder = r"C:\Users\hehe\3img"
os.makedirs(output_folder, exist_ok=True)
doc = fitz.open(pdf_path)
for page_index in range(len(doc)):
page = doc[page_index]
images = page.get_images(full=True)
image = Image.open(io.BytesIO(image_bytes))
width, height = image.size
left_half = image.crop((0, 0, width // 2, height))
print(f"✅ Images saved to {output_folder}")
Discover more from Cùng Học Cùng Mơ
Subscribe to get the latest posts sent to your email.