TRƯỜNG ĐẠI HỌC ĐỒNG THÁP
KHOA SƯ PHẠM TOÁN – TIN
BÁO CÁO
MÔN HỌC LẬP TRÌNH PYTHON VÀ ỨNG DỤNG
CHỦ ĐỀ:
Ứng dụng "Dán chữ ký vào PDF"
Ngành: Sư Phạm Tin Học
Lớp: ĐHSTIN22A
Nhóm 10
GVHD: TIẾN SĨ ĐẶNG QUỐC BẢO
Đồng Tháp, ngày 12 tháng 05 năm 202
Phụ lục
BẢNG PHÂN CÔNG...........................................................................1
LỜI CẢM ƠN........................................................................................2
PHẦN MỘT: MỞ ĐẦU......................................................................3
1. GIỚI THIỆU ĐỀ TÀI..................................................................3
2. Ý NGHĨA LÝ THUYẾT, THỰC TIỄN ĐỀ TÀI........................3
2.1 Ý nghĩa lý thuyết:.......................................................................3
2.2 Ý nghĩa thực tiễn:.......................................................................4
PHẦN HAI: NỘI DUNG.....................................................................5
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT................................................5
I. Giới thiệu tổng quan về Visual Studio Code...........................5
1.1. Khái niệm.......................................................................5
1.2. Ưu và nhược điểm của Visual Studio Code...................5
1.3. Cách hoạt động của Visual Studio Code........................6
II. Giới thiệu tổng quan về Python..............................................6
2.1. Khái niệm.......................................................................6
2.2. Ưu và nhược điểm của Python......................................6
2.3. Python hoạt động như thế nào........................................7
III. Phân Tích Cấu Trúc và Chức Năng Ứng Dụng...............7
3.1. Lớp PDFSignatureApp...................................................7
3.2. Chọn và hiển thị file PDF (filepdf_pdf).........................8
3.3. Tải hình ảnh chữ ký (hinhanh_signature).......................9
3.4. Hiển thị trang PDF (render_page)................................10
3.5. Di chuyển và đặt chữ ký lên PDF.................................11
3.6. Lưu file PDF với chữ ký (save_pdf).............................11
3.7. Chuyển đổi giữa các trang (tien_page và lui_page).....12
IV. Quy Trình Giải Thuật Xử Lý..............................................13
V. Kết Luận....................................................................................14
BẢNG PHÂN CÔNG
HỌ TÊN
NHIỆM VỤ
Lê Nguyễn Trung Nghĩa
Làm code và soạn word
Lê Minh Hoài
Làm code và soạn word
Nguyễn Minh Điền
Làm code và soạn ppt
Đào Thanh Thuận
Làm code và soạn ppt
Trần Lê Duy
Làm code và tổng hợp
nội dung
LỜI CẢM ƠN
Nhóm chúng em xin gửi lời cảm ơn chân thành đến Thầy Tiến Đặng Quốc
Bảo đã tận tình hướng dẫn và truyền đạt những kiến thức quý giá trong môn Lập
trình Python và Ứng dụng.
Trong suốt quá trình học tập, Thầy không chcung cấp cho chúng em những kiến
thức bản về ngôn ngữ lập trình Python còn chia scác phương pháp học
tập nghiên cứu hiệu quả. Những chỉ dẫn cụ thể sự nhiệt tình của Thầy đã
giúp chúng em có thêm tự tin để tìm hiểu, thực hành và hoàn thành bài báo cáo
này.
Chúng em hiểu rằng bài báo cáo vẫn còn nhiều thiếu sót và rất mong nhận được
những ý kiến đóng góp từ Thầy để bài làm được hoàn thiện hơn. Một lần nữa,
nhóm chúng em xin gửi lời cảm ơn sâu sắc đến Thầy. Trân trọng,
Nhóm 10
PHẦN MỘT: MỞ ĐẦU
1. GIỚI THIỆU ĐỀ TÀI
Trong thời đại công nghệ shiện nay, việc xử tài liệu dưới dạng file PDF đã
trở thành một phần không thể thiếu trong các hoạt động học tập, làm việc và giao
dịch. Đặc biệt, nhu cầu chèn chký điện tử vào file PDF ngày càng phổ biến bởi
tính tiện lợi, nhanh chóng, bảo mật cao mà nó mang lại. Chữ ký điện tử không
chỉ giúp các nhân tổ chức tiết kiệm thời gian, công sức còn đảm bảo
tính chuyên nghiệp trong việc kết hợp đồng, c thực văn bản, hay các loại
giấy tờ hành chính.
Tuy nhiên, không phải ai cũng sẵn các công cụ chuyên dụng để chỉnh sửa hoặc
chèn chữ vào PDF. Nhiều phần mềm hỗ trợ hiện nay thường phức tạp, tốn
kém, hoặc yêu cầu kiến thức kỹ thuật cao. Điều này đã đặt ra nhu cầu cần có một
giải pháp đơn giản, dễ sdụng, hiệu quả để mọi người đều thể dễ dàng
chèn chữ ký vào file PDF mà không cần nhờ đến các công cụ phức tạp hay dịch
vụ đắt đỏ.
Ứng dụng "Dán chữ vào PDF" được xây dựng nhằm đáp ứng nhu cầu đó. Ứng
dụng cho phép người dùng chọn file PDF, tải lên hình ảnh chữ của mình,
dễ dàng chèn chữ ký vào bất kỳ vị trí nào trên trang PDF. Điểm nổi bật của ứng
dụng nằm ở giao diện thân thiện, trực quan, cùng các thao tác đơn giản như kéo,
thả và lưu file. Người dùng có thể nhanh chóng hoàn thành việc chèn chữ ký mà
không cần mất nhiều thời gian làm quen với công cụ.
Với sự kết hợp giữa các thư viện Python mạnh mẽ như Tkinter (xây dựng giao
diện), Pillow (xử hình ảnh), PyMuPDF (xPDF), ứng dụng này không
chỉ hỗ trợ việc chỉnh sửa file PDF một cách nhanh chóng còn đảm bảo tính
chính xác cao. Đây là giải pháp lý tưởng không chỉ dành cho học sinh, sinh viên
hay nhân viên văn phòng mà còn phù hợp với bất kỳ ai nhu cầu chỉnh sửa file
PDF hằng ngày. Ứng dụng không chỉ giúp tiết kiệm thời gian công sức còn
nâng cao hiệu suất làm việc, mở ra thêm nhiều tiện ích trong xtài liệu điện
tử.
2. Ý NGHĨATHUYẾT, THỰC TIỄN ĐỀ TÀI
2.1 Ý nghĩa lý thuyết:
Đề tài nghiên cứu và phát triển ứng dụng "Dán chữ ký vào PDF" đóng góp vào
kho tàng tri thức về việc ứng dụng công nghệ trong xử lý tài liệu điện tử, đặc
biệt là các file PDF. Nó là sự kết hợp các công nghệ lập trình Python với các thư
viện chuyên dụng như Tkinter để xây dựng giao diện người dùng, Pillow để xử
lý hình ảnh, và PyMuPDF để thao tác với file PDF. Việc phát triển ứng dụng
này không chỉ giúp mở rộng khả năng ứng dụng của các thư viện trên mà còn
cung cấp thêm một giải pháp đơn giản, hiệu quả, tiết kiệm thời gian và công sức
trong việc chèn chữ ký điện tử. Về mặt lý thuyết, đề tài còn mang ý nghĩa quan
trọng trong việc nghiên cứu cách kết hợp giữa giao diện thân thiện và thao tác
đơn giản với các công nghệ xử lý tài liệu, giúp người dùng phổ thông dễ dàng
tiếp cận và sử dụng mà không cần kiến thức chuyên sâu về kỹ thuật.
2.2 Ý nghĩa thực tiễn:
Trong bối cảnh số hóa các hoạt động học tập, làm việc và giao dịch hiện
nay, việc chèn chữ ký vào file PDF là một nhu cầu cấp thiết đối với nhiều cá
nhân và tổ chức. Ứng dụng "Dán chữ ký vào PDF" mang đến giải pháp nhanh
chóng, hiệu quả và dễ sử dụng, giúp giải quyết các vấn đề khó khăn mà nhiều
người gặp phải khi sử dụng các phần mềm hiện có như phức tạp, đắt đỏ, hoặc
yêu cầu kiến thức kỹ thuật cao. Ứng dụng không chỉ hỗ trợ học sinh, sinh viên,
giáo viên, nhân viên văn phòng mà còn phù hợp cho bất kỳ ai có nhu cầu xử lý
tài liệu PDF hàng ngày. Thêm vào đó, ứng dụng này giúp tiết kiệm thời gian,
công sức, nâng cao hiệu suất làm việc và cải thiện tính chuyên nghiệp trong quy
trình ký kết hợp đồng, xác thực văn bản. Nhờ vậy, ứng dụng có tiềm năng trở
thành công cụ hữu ích và phổ biến trong công việc hàng ngày.
PHẦN HAI: NỘI DUNG
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
I. Giới thiệu tổng quan về Visual Studio Code
1.1. Khái niệm
Visual Studio Code (VS Code) một trình soạn thảo nguồn mở (open-source)
miễn phí được phát triển bởi Microsoft. Đây một công cụ mạnh mẽ dành
cho các lập trình viên, hỗ trợ đa nền tảng (Windows, macOS, Linux) được
thiết kế đtối ưu hóa việc viết, chỉnh sửa gỡ lỗi mã nguồn trong các ngôn ngữ
lập trình khác nhau.
Visual Studio Code nổi bật nhờ khả năng tùy chỉnh linh hoạt, giao diện đơn giản
nhưng hiện đại, và tích hợp hàng ngàn tiện ích mở rộng (extensions) để nâng cao
chức năng.
1.2. Ưu và nhược điểm của Visual Studio Code Ưu điểm:
Gọn nhẹ nhanh chóng: VS Code tải nhanh hoạt động mượt ngay cả
trên các hệ thống có cấu hình thấp.
Đa nền tảng: Chạy tốt trên Windows, macOS, và Linux.
Tích hợp Git: Hỗ trợ quản lý mã nguồn Git và GitHub trực tiếp từ giao diện.
Hỗ trợ đa ngôn ngữ: VS Code hỗ trợ hầu hết các ngôn ngữ lập trình phổ
biến như JavaScript, Python, Java, C#, HTML, CSS.
Kho tiện ích mở rộng phong phú: Người dùng có thể cài đặt thêm extensions để
mở rộng tính năng, chẳng hạn như tích hợp frameworks, công cụ kiểm thử, gỡ
lỗi, hoặc cải thiện giao diện.
Nhược điểm:
Đòi hỏi cấu hình tùy chỉnh: Người dùng mới có thể mất thời gian để làm quen
và tùy chỉnh VS Code theo nhu cầu cá nhân.
Phthuộc vào extensions: Một số tính năng mạnh mẽ cần cài đặt extensions,
thể gây khó khăn cho người mới bắt đầu.
Tốn tài nguyên khi mở nhiều extensions: Việc sử dụng nhiều tiện ích mở rộng
đồng thời có thể làm chậm hiệu suất trên các máy tính cấu hình thấp.
Không hỗ trợ GUI nâng cao: Không phù hợp với các dự án cần giao diện người
dùng đồ họa (GUI) phức tạp như các IDE lớn (Visual Studio, IntelliJ IDEA).
1.3. Cách hoạt động của Visual Studio Code
Core Editor: Cung cấp các chức năng chỉnh sửa văn bản cơ bản, như mở tệp, tìm
kiếm, và cú pháp mã nguồn.
Extensions: Mở rộng chức năng thông qua các tiện ích mở rộng. Người dùng
thể thêm các tính năng như gợi ý mã, hỗ trợ frameworks, hoặc tích hợp với các
công cụ khác.
Language Server Protocol (LSP): Giao thức này giúp VS Code giao tiếp với các
server ngôn ngữ khác nhau để cung cấp các tính năng nâng cao như IntelliSense,
linting, và gỡ li
II. Giới thiệu tổng quan về Python
2.1. Khái niệm
Python một ngôn ngữ lập trình thông dịch do Guido van Rossum tạo ra năm
1990, nó được xem là ngôn ngữ hình thức rất sáng sủa, cấu trúc rõ ràng, thuận
tiện cho người mới học lập trình. Cấu trúc của Python còn cho phép người sử
dụng viết lệnh với số lần phím tối thiểu, như nhận định của chính Guido
van Rossum trong một bài phỏng vấn ông.Python hoàn toàn tạo kiểu động
dùng chế cấp phát bộnhớ tự động; do vậy tương tự như Perl, Ruby, Scheme,
Smalltalk, và Tcl. Python được phát triển trong một dự án mã mở, do tổ chức phi
lợi nhuận Python Software Foundation quản lý.
Bạn thể sử dụng nó trong các lĩnh vực như phát triển phần mềm, phát triển
web, thiết kế web,v.v…và nó hoàn toàn có thchạy trên nhiều hệ điều hành khác
nhau: Unix, MS-DOS ,Windows,Mac OS, Linux…
2.2. Ưu và nhược điểm của Python Ưu điểm:
Đơn giản: Cú pháp đơn giản giúp cho người lập trình dễ dàng đọc và tìm hiểu.
Tốc độ: Python có tốc độ xử lý nhanh hơn so với ngôn ngữ PHP
Tương tác: Chế độ tương tác cho phép người lập trình thử nghiệm tương tác sửa
lỗi của các đoạn mã.
Chất lượng: Thư viện tiêu chuẩn cao, Python khối sở dữ liệu khá lớn
nhằm cung cấp giao diện cho tất cả các CSDL thương mại lớn.
Thuận tiện: Python được biên dịch chạy trên tất cả các nền tảng lớn hiện nay.
Mở rộng: Với tính năng này, Python cho phép người lập trình thể thêm hoặc
tùy chỉnh các công cụ nhằm ti đa hiệu quả có thể đạt được trong công việc.
GUI Programming: Giúp cho việc thực hiện ảnh minh hoạ di động một cách tự
nhiên và sống động.
Nhược điểm:
Python không các thuộc tính như: protected,private hay public, không
vòng lặp do…while và switch….case.
Python mặc dù nhanh hơn so với PHP, nhưng lại không nhanh hơn so với C++,
Java.
2.3. Python hoạt động như thế nào
Python ngôn ngữ lập trình thông dịch đa nền tảng, thực thi nguồn qua
trình thông dịch. Nó hỗ trợ nhiều mô hình lập trình (thủ tục, OOP, hàm), quản lý
bộnhớ tự động bằng Garbage Collection, cung cấp thư viện phong phú. Python
dễ đọc, dễ viết, và hoạt động linh hoạt trên các hệ điều hành.
III. Phân Tích Cấu Trúc và Chức Năng Ứng Dụng
3.1. Lớp PDFSignatureApp
Lớp này đại diện cho toàn bộ ứng dụng, chứa các phương thức thuộc tính để
thực hiện các chức năng chính.
Phương thức __init__(self, root)
Phương thức khởi tạo ứng dụng, thiết lập giao diện người dùng.
self.root = root: Đặt cửa sổ chính của ứng dụng.
self.canvas: Tạo vùng hiển thị nội dung PDF, nơi người dùng thể thao
tác kéo thả chữ .
Các nút chức năng:
Chọn File PDF: Gọi phương thức filepdf_pdf để chọn file PDF từ thiết bị.
Chọn Hình Ảnh Chữ Ký: Gọi phương thức hinhanh_signature đtải hình ảnh
chữ ký.
Lưu PDF: Gọi phương thức save_pdf để lưu file PDF sau khi chèn chữ ký.
Trang Trước/Trang Kế: Chuyển đổi giữa các trang trong file PDF bằng cách gọi
lui_page hoặc tien_page.
self.canvas.bind(): Gắn sự kiện chuột để di chuyển hoặc đặt chữ ký lên canvas.
3.2. Chọn và hiển thị file PDF (filepdf_pdf)
Phương thức này sử dụng filedialog.askopenfilename để mở file PDF từ thiết bị.
Khi chọn thành công, phương thức render_page sẽ được gọi để hiển thị nội dung
trang đầu tiên của PDF trên canvas.
3.3. Tải hình ảnh chữ ký (hinhanh_signature)
Đọc file ảnh: Sử dụng Pillow để mở file ảnh chữ ký (PNG, JPG).
Chuyển đổi và thay đổi kích thước:
Hình ảnh được chuyển sang định dạng PNG để đảm bảo tương thích với PDF.
Ảnh được thu nhỏ với kích thước tối đa 100x100 để phù hợp hiển thị trên canvas.
Hiển thị chữ ký trên canvas:
Sử dụng self.canvas.create_image để hiển thị ảnh chữ tại vị trí mặc định (50,
50).
Người dùng có thể kéo thả ảnh này bằng chuột.
3.4. Hiển thị trang PDF (render_page) Mở file PDF: Sử dụng PyMuPDF để
đọc file.
Chuyển trang PDF thành hình ảnh:
Sử dụng phương thức get_pixmap của PyMuPDF để lấy hình ảnh trang hiện tại.
Hình ảnh được resize để phù hợp với kích thước canvas (1000x750).
Hiển thị trên canvas:
Ảnh trang PDF được vẽ lên canvas bằng self.canvas.create_image.
3.5. Di chuyển và đặt chữ ký lên PDF Move_signature(self, event):
Cho phép người dùng di chuyển ảnh chữ ký trên canvas khi kéo chuột (sự kiện
<B1-Motion>).
Cập nhật vị trí chữ ký mới (tọa độ x, y trên canvas).
Place_signature(self, event):
Cố định vị trí chữ trên canvas khi người dùng thả chuột (sự kiện
<ButtonRelease-1>).
3.6. Lưu file PDF với chữ ký (save_pdf) Xác định vị trí chữ ký trên file PDF:
Dựa trên tọa độ chữ trên canvas, tính toán tọa độ tương ứng trên PDF bằng
cách quy đổi tỷ lệ giữa canvas và PDF thật.
Chèn chữ ký vào PDF:
Sử dụng insert_image ca PyMuPDF để chèn hình ảnh chữ ký vào trang PDF.
Vùng chữ được xác định bằng một hình chữ nhật xung quanh vị trí đã chỉ
định.
Lưu PDF mới:
Sử dụng filedialog.asksaveasfilename để lưu file PDF đã chỉnh sửa vào thiết bị.
3.7. Chuyển đổi giữa các trang (tien_page và lui_page) tien_page(self): Tăng
chỉ số trang hiện tại để hiển thị trang tiếp theo. Gọi
lại phương thức render_page để cập nhật nội dung canvas.
lui_page(self): Giảm chỉ số trang hiện tại để quay lại trang trước.
IV. Quy Trình Giải Thuật Xử Lý
Để thực hiện việc chèn chữ vào file PDF, ứng dụng được thiết kế với quy trình
xử ràng hiệu quả. Đầu tiên, người dùng sẽ chọn file PDF cần chỉnh sửa
thông qua giao diện, sử dụng thư viện tkinter để mở cửa sổ chọn file lưu đường
dẫn file. Sau đó, thư viện PyMuPDF (fitz) được sử dụng để hiển thị trang PDF
đầu tiên trên giao diện. Các thông tin như kích thước trang PDF cũng được lấy ra
để đảm bảo các thao tác xử lý sau này được chính xác.
Khi người dùng tải lên hình ảnh chữ ký, ứng dụng sử dụng thư viện Pillow (PIL)
để đọc và xử lý hình ảnh. Hình ảnh chữ được chuyển đổi sang định dạng PNG
nếu cần, sau đó được thu nhỏ đphù hợp với giao diện. Chữ này được hiển
thị trên canvas bằng thư viện Tkinter, và người dùng có thể di chuyển chữ ký tới
vị trí mong muốn trên trang PDF thông qua thao tác kéo thả chuột. Các skiện
chuột như di chuyển và thả được theo dõi để xác định tọa độ chính xác của chữ
ký.
Khi hoàn tất chỉnh sửa, ứng dụng thực hiện chuyển đổi tọa độ chữ tcanvas
sang tọa độ thực tế trên PDF dựa trên kích thước tỉ lệ của trang PDF. Sau đó, với
sự hỗ trợ của PyMuPDF, chữ được chèn vào trang PDF tại vị trí được chỉ định.
Tiếp theo, ứng dụng cho phép người dùng lưu file PDF mới với chữ ký đã được
chèn thông qua cửa sổ lưu file.
Ngoài ra, ứng dụng htrợ tính năng điều hướng giữa các trang PDF để người
dùng có thể chèn chữ ký trên nhiều trang. Quy trình này đảm bảo tính chính xác
cao, nhờ vào sự kết hợp chặt chẽ giữa các thư viện PyMuPDF, Pillow Tkinter.
V. Kết Luận
Kết quả đạt được
Qua quá trình xây dựng ứng dụng chèn chữ ký vào file PDF, em đã tiếp cận
làm quen với các thư viện xử lý file PDF, giao diện đồ họa xử hình ảnh
trong Python. Ứng dụng đã hoàn thiện các chức năng chính như hiển thị nội dung
từng trang của file PDF trên giao diện, hỗ trợ người dùng tải chỉnh sửa hình
ảnh chữ để hiển thị trực tiếp lên file PDF. Ngoài ra, ứng dụng còn cho phép
chèn chữ vào vị trí mong muốn, lưu lại file PDF đã chỉnh sửa và cung cấp tính
năng chuyển đổi linh hoạt giữa các trang. Giao diện được xây dựng theo hướng
đơn giản, trực quan, dễ sử dụng, đáp ứng các thao tác cơ bản một cách hiệu quả.
Hạn chế
Tuy đã đạt được những kết quả khả quan, ứng dụng vẫn còn một số hạn chế cần
khắc phục. Cụ thể, chức năng xử chữ chỉ hỗ trợ các định dạng ảnh cơ bản
như PNG JPG, chưa mở rộng được sang các định dạng phổ biến khác. Việc
hiển thị file PDF thể chưa được tối ưu khi xử các file dung lượng lớn
hoặc nhiều trang. Bên cạnh đó, giao diện hiện tại chưa phù hợp để sử dụng trên
các thiết bị di động hoặc màn hình nhỏ, gây ra bất tiện trong một số trường hợp.
Ngoài ra, ứng dụng cũng chưa tích hợp tính năng bảo mật hoặc xác thực người
dùng, điều này có thể gây ra rủi ro khi sử dụng trong môi trường chuyên nghiệp.
Hướng phát triển
Ứng dụng sđược phát triển theo nhiều hướng để cải thiện tính năng và trải
nghiệm người dùng. Trước tiên, cần nâng cấp khả năng hỗ trợ các định dạng chữ
ký như SVG hoặc BMP, đồng thời tối ưu hóa tốc độ xử lý các file PDF phức tạp.
Về giao diện, cần nâng cấp để phù hợp hơn với các thiết bị di động và màn hình
cảm ứng, giúp ứng dụng linh hoạt hơn trong nhiều môi trường sử dụng. Ngoài ra,
việc bổ sung các tính năng bảo mật, như xác thực người dùng hoặc mã hóa file,
sẽ giúp tăng độ an toàn đáng tin cậy cho ứng dụng. Bên cạnh đó, tích hợp thêm
chức năng lưu lịch sử chỉnh sửa file hỗ trợ quản các file đã xử lý sẽ mang
lại tiện ích lớn hơn cho người dùng. Việc nghiên cứu các công nghệ mới nhằm
mở rộng khả năng hỗ trợ nhiều định dạng file PDF sẽ là bước đi quan trọng trong
định hướng phát triển lâu dài của ứng dụng.

Preview text:

TRƯỜNG ĐẠI HỌC ĐỒNG THÁP
KHOA SƯ PHẠM TOÁN – TIN BÁO CÁO
MÔN HỌC LẬP TRÌNH PYTHON VÀ ỨNG DỤNG CHỦ ĐỀ:
Ứng dụng "Dán chữ ký vào PDF"
Ngành: Sư Phạm Tin Học Lớp: ĐHSTIN22A Nhóm 10
GVHD: TIẾN SĨ ĐẶNG QUỐC BẢO
Đồng Tháp, ngày 12 tháng 05 năm 202 Phụ lục
BẢNG PHÂN CÔNG...........................................................................1
LỜI CẢM ƠN........................................................................................2
PHẦN MỘT: MỞ ĐẦU......................................................................3 1.
GIỚI THIỆU ĐỀ TÀI..................................................................3 2.
Ý NGHĨA LÝ THUYẾT, THỰC TIỄN ĐỀ TÀI........................3
2.1 Ý nghĩa lý thuyết:.......................................................................3
2.2 Ý nghĩa thực tiễn:.......................................................................4
PHẦN HAI: NỘI DUNG.....................................................................5
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT................................................5 I.
Giới thiệu tổng quan về Visual Studio Code...........................5
1.1. Khái niệm.......................................................................5
1.2. Ưu và nhược điểm của Visual Studio Code...................5
1.3. Cách hoạt động của Visual Studio Code........................6
II. Giới thiệu tổng quan về Python..............................................6
2.1. Khái niệm.......................................................................6
2.2. Ưu và nhược điểm của Python......................................6
2.3. Python hoạt động như thế nào........................................7
III. Phân Tích Cấu Trúc và Chức Năng Ứng Dụng...............7
3.1. Lớp PDFSignatureApp...................................................7
3.2. Chọn và hiển thị file PDF (filepdf_pdf).........................8
3.3. Tải hình ảnh chữ ký (hinhanh_signature).......................9
3.4. Hiển thị trang PDF (render_page)................................10
3.5. Di chuyển và đặt chữ ký lên PDF.................................11
3.6. Lưu file PDF với chữ ký (save_pdf).............................11
3.7. Chuyển đổi giữa các trang (tien_page và lui_page).....12
IV. Quy Trình Giải Thuật Xử Lý..............................................13
V. Kết Luận....................................................................................14 BẢNG PHÂN CÔNG HỌ VÀ TÊN NHIỆM VỤ
Lê Nguyễn Trung Nghĩa
Làm code và soạn word Lê Minh Hoài
Làm code và soạn word Nguyễn Minh Điền
Làm code và soạn ppt Đào Thanh Thuận
Làm code và soạn ppt Trần Lê Duy Làm code và tổng hợp nội dung
LỜI CẢM ƠN
Nhóm chúng em xin gửi lời cảm ơn chân thành đến Thầy Tiến sĩ Đặng Quốc
Bảo đã tận tình hướng dẫn và truyền đạt những kiến thức quý giá trong môn Lập
trình Python và Ứng dụng.
Trong suốt quá trình học tập, Thầy không chỉ cung cấp cho chúng em những kiến
thức cơ bản về ngôn ngữ lập trình Python mà còn chia sẻ các phương pháp học
tập và nghiên cứu hiệu quả. Những chỉ dẫn cụ thể và sự nhiệt tình của Thầy đã
giúp chúng em có thêm tự tin để tìm hiểu, thực hành và hoàn thành bài báo cáo này.
Chúng em hiểu rằng bài báo cáo vẫn còn nhiều thiếu sót và rất mong nhận được
những ý kiến đóng góp từ Thầy để bài làm được hoàn thiện hơn. Một lần nữa,
nhóm chúng em xin gửi lời cảm ơn sâu sắc đến Thầy. Trân trọng, Nhóm 10
PHẦN MỘT: MỞ ĐẦU
1. GIỚI THIỆU ĐỀ TÀI
Trong thời đại công nghệ số hiện nay, việc xử lý tài liệu dưới dạng file PDF đã
trở thành một phần không thể thiếu trong các hoạt động học tập, làm việc và giao
dịch. Đặc biệt, nhu cầu chèn chữ ký điện tử vào file PDF ngày càng phổ biến bởi
tính tiện lợi, nhanh chóng, và bảo mật cao mà nó mang lại. Chữ ký điện tử không
chỉ giúp các cá nhân và tổ chức tiết kiệm thời gian, công sức mà còn đảm bảo
tính chuyên nghiệp trong việc ký kết hợp đồng, xác thực văn bản, hay các loại giấy tờ hành chính.
Tuy nhiên, không phải ai cũng có sẵn các công cụ chuyên dụng để chỉnh sửa hoặc
chèn chữ ký vào PDF. Nhiều phần mềm hỗ trợ hiện nay thường phức tạp, tốn
kém, hoặc yêu cầu kiến thức kỹ thuật cao. Điều này đã đặt ra nhu cầu cần có một
giải pháp đơn giản, dễ sử dụng, và hiệu quả để mọi người đều có thể dễ dàng
chèn chữ ký vào file PDF mà không cần nhờ đến các công cụ phức tạp hay dịch vụ đắt đỏ.
Ứng dụng "Dán chữ ký vào PDF" được xây dựng nhằm đáp ứng nhu cầu đó. Ứng
dụng cho phép người dùng chọn file PDF, tải lên hình ảnh chữ ký của mình, và
dễ dàng chèn chữ ký vào bất kỳ vị trí nào trên trang PDF. Điểm nổi bật của ứng
dụng nằm ở giao diện thân thiện, trực quan, cùng các thao tác đơn giản như kéo,
thả và lưu file. Người dùng có thể nhanh chóng hoàn thành việc chèn chữ ký mà
không cần mất nhiều thời gian làm quen với công cụ.
Với sự kết hợp giữa các thư viện Python mạnh mẽ như Tkinter (xây dựng giao
diện), Pillow (xử lý hình ảnh), và PyMuPDF (xử lý PDF), ứng dụng này không
chỉ hỗ trợ việc chỉnh sửa file PDF một cách nhanh chóng mà còn đảm bảo tính
chính xác cao. Đây là giải pháp lý tưởng không chỉ dành cho học sinh, sinh viên
hay nhân viên văn phòng mà còn phù hợp với bất kỳ ai có nhu cầu chỉnh sửa file
PDF hằng ngày. Ứng dụng không chỉ giúp tiết kiệm thời gian và công sức mà còn
nâng cao hiệu suất làm việc, mở ra thêm nhiều tiện ích trong xử lý tài liệu điện tử.
2. Ý NGHĨA LÝ THUYẾT, THỰC TIỄN ĐỀ TÀI
2.1 Ý nghĩa lý thuyết:
Đề tài nghiên cứu và phát triển ứng dụng "Dán chữ ký vào PDF" đóng góp vào
kho tàng tri thức về việc ứng dụng công nghệ trong xử lý tài liệu điện tử, đặc
biệt là các file PDF. Nó là sự kết hợp các công nghệ lập trình Python với các thư
viện chuyên dụng như Tkinter để xây dựng giao diện người dùng, Pillow để xử
lý hình ảnh, và PyMuPDF để thao tác với file PDF. Việc phát triển ứng dụng
này không chỉ giúp mở rộng khả năng ứng dụng của các thư viện trên mà còn
cung cấp thêm một giải pháp đơn giản, hiệu quả, tiết kiệm thời gian và công sức
trong việc chèn chữ ký điện tử. Về mặt lý thuyết, đề tài còn mang ý nghĩa quan
trọng trong việc nghiên cứu cách kết hợp giữa giao diện thân thiện và thao tác
đơn giản với các công nghệ xử lý tài liệu, giúp người dùng phổ thông dễ dàng
tiếp cận và sử dụng mà không cần kiến thức chuyên sâu về kỹ thuật.
2.2 Ý nghĩa thực tiễn:
Trong bối cảnh số hóa các hoạt động học tập, làm việc và giao dịch hiện
nay, việc chèn chữ ký vào file PDF là một nhu cầu cấp thiết đối với nhiều cá
nhân và tổ chức. Ứng dụng "Dán chữ ký vào PDF" mang đến giải pháp nhanh
chóng, hiệu quả và dễ sử dụng, giúp giải quyết các vấn đề khó khăn mà nhiều
người gặp phải khi sử dụng các phần mềm hiện có như phức tạp, đắt đỏ, hoặc
yêu cầu kiến thức kỹ thuật cao. Ứng dụng không chỉ hỗ trợ học sinh, sinh viên,
giáo viên, nhân viên văn phòng mà còn phù hợp cho bất kỳ ai có nhu cầu xử lý
tài liệu PDF hàng ngày. Thêm vào đó, ứng dụng này giúp tiết kiệm thời gian,
công sức, nâng cao hiệu suất làm việc và cải thiện tính chuyên nghiệp trong quy
trình ký kết hợp đồng, xác thực văn bản. Nhờ vậy, ứng dụng có tiềm năng trở
thành công cụ hữu ích và phổ biến trong công việc hàng ngày. PHẦN HAI: NỘI DUNG
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
I. Giới thiệu tổng quan về Visual Studio Code 1.1. Khái niệm
Visual Studio Code (VS Code) là một trình soạn thảo mã nguồn mở (open-source)
và miễn phí được phát triển bởi Microsoft. Đây là một công cụ mạnh mẽ dành
cho các lập trình viên, hỗ trợ đa nền tảng (Windows, macOS, Linux) và được
thiết kế để tối ưu hóa việc viết, chỉnh sửa và gỡ lỗi mã nguồn trong các ngôn ngữ lập trình khác nhau.
Visual Studio Code nổi bật nhờ khả năng tùy chỉnh linh hoạt, giao diện đơn giản
nhưng hiện đại, và tích hợp hàng ngàn tiện ích mở rộng (extensions) để nâng cao chức năng.
1.2. Ưu và nhược điểm của Visual Studio Code Ưu điểm:
‐ Gọn nhẹ và nhanh chóng: VS Code tải nhanh và hoạt động mượt mà ngay cả
trên các hệ thống có cấu hình thấp. ‐
Đa nền tảng: Chạy tốt trên Windows, macOS, và Linux. ‐
Tích hợp Git: Hỗ trợ quản lý mã nguồn Git và GitHub trực tiếp từ giao diện. ‐
Hỗ trợ đa ngôn ngữ: VS Code hỗ trợ hầu hết các ngôn ngữ lập trình phổ
biến như JavaScript, Python, Java, C#, HTML, CSS.
‐ Kho tiện ích mở rộng phong phú: Người dùng có thể cài đặt thêm extensions để
mở rộng tính năng, chẳng hạn như tích hợp frameworks, công cụ kiểm thử, gỡ
lỗi, hoặc cải thiện giao diện.
Nhược điểm:
‐ Đòi hỏi cấu hình tùy chỉnh: Người dùng mới có thể mất thời gian để làm quen
và tùy chỉnh VS Code theo nhu cầu cá nhân.
‐ Phụ thuộc vào extensions: Một số tính năng mạnh mẽ cần cài đặt extensions, có
thể gây khó khăn cho người mới bắt đầu.
‐ Tốn tài nguyên khi mở nhiều extensions: Việc sử dụng nhiều tiện ích mở rộng
đồng thời có thể làm chậm hiệu suất trên các máy tính cấu hình thấp.
‐ Không hỗ trợ GUI nâng cao: Không phù hợp với các dự án cần giao diện người
dùng đồ họa (GUI) phức tạp như các IDE lớn (Visual Studio, IntelliJ IDEA).
1.3. Cách hoạt động của Visual Studio Code
Core Editor: Cung cấp các chức năng chỉnh sửa văn bản cơ bản, như mở tệp, tìm
kiếm, và cú pháp mã nguồn.
Extensions: Mở rộng chức năng thông qua các tiện ích mở rộng. Người dùng có
thể thêm các tính năng như gợi ý mã, hỗ trợ frameworks, hoặc tích hợp với các công cụ khác.
Language Server Protocol (LSP): Giao thức này giúp VS Code giao tiếp với các
server ngôn ngữ khác nhau để cung cấp các tính năng nâng cao như IntelliSense, linting, và gỡ lỗi
II. Giới thiệu tổng quan về Python 2.1. Khái niệm
Python là một ngôn ngữ lập trình thông dịch do Guido van Rossum tạo ra năm
1990, nó được xem là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận
tiện cho người mới học lập trình. Cấu trúc của Python còn cho phép người sử
dụng viết mã lệnh với số lần gõ phím tối thiểu, như nhận định của chính Guido
van Rossum trong một bài phỏng vấn ông.Python hoàn toàn tạo kiểu động và
dùng cơ chế cấp phát bộnhớ tự động; do vậy nó tương tự như Perl, Ruby, Scheme,
Smalltalk, và Tcl. Python được phát triển trong một dự án mã mở, do tổ chức phi
lợi nhuận Python Software Foundation quản lý.
Bạn có thể sử dụng nó trong các lĩnh vực như phát triển phần mềm, phát triển
web, thiết kế web,v.v…và nó hoàn toàn có thể chạy trên nhiều hệ điều hành khác
nhau: Unix, MS-DOS ,Windows,Mac OS, Linux…
2.2. Ưu và nhược điểm của Python Ưu điểm:
‐ Đơn giản: Cú pháp đơn giản giúp cho người lập trình dễ dàng đọc và tìm hiểu.
‐ Tốc độ: Python có tốc độ xử lý nhanh hơn so với ngôn ngữ PHP
‐ Tương tác: Chế độ tương tác cho phép người lập trình thử nghiệm tương tác sửa lỗi của các đoạn mã.
‐ Chất lượng: Thư viện có tiêu chuẩn cao, Python có khối cơ sở dữ liệu khá lớn
nhằm cung cấp giao diện cho tất cả các CSDL thương mại lớn.
‐ Thuận tiện: Python được biên dịch và chạy trên tất cả các nền tảng lớn hiện nay.
‐ Mở rộng: Với tính năng này, Python cho phép người lập trình có thể thêm hoặc
tùy chỉnh các công cụ nhằm tối đa hiệu quả có thể đạt được trong công việc.
‐ GUI Programming: Giúp cho việc thực hiện ảnh minh hoạ di động một cách tự nhiên và sống động.
Nhược điểm:
‐ Python không có các thuộc tính như: protected,private hay public, không có
vòng lặp do…while và switch….case.
‐ Python mặc dù nhanh hơn so với PHP, nhưng lại không nhanh hơn so với C++, Java.
2.3. Python hoạt động như thế nào
Python là ngôn ngữ lập trình thông dịch và đa nền tảng, thực thi mã nguồn qua
trình thông dịch. Nó hỗ trợ nhiều mô hình lập trình (thủ tục, OOP, hàm), quản lý
bộnhớ tự động bằng Garbage Collection, và cung cấp thư viện phong phú. Python
dễ đọc, dễ viết, và hoạt động linh hoạt trên các hệ điều hành.
III. Phân Tích Cấu Trúc và Chức Năng Ứng Dụng
3.1. Lớp PDFSignatureApp
Lớp này đại diện cho toàn bộ ứng dụng, chứa các phương thức và thuộc tính để
thực hiện các chức năng chính.
Phương thức __init__(self, root)
Phương thức khởi tạo ứng dụng, thiết lập giao diện người dùng.
‐ self.root = root: Đặt cửa sổ chính của ứng dụng. ‐
self.canvas: Tạo vùng hiển thị nội dung PDF, nơi người dùng có thể thao tác kéo thả chữ ký. Các nút chức năng:
‐ Chọn File PDF: Gọi phương thức filepdf_pdf để chọn file PDF từ thiết bị.
‐ Chọn Hình Ảnh Chữ Ký: Gọi phương thức hinhanh_signature để tải hình ảnh chữ ký.
‐ Lưu PDF: Gọi phương thức save_pdf để lưu file PDF sau khi chèn chữ ký.
‐ Trang Trước/Trang Kế: Chuyển đổi giữa các trang trong file PDF bằng cách gọi lui_page hoặc tien_page.
self.canvas.bind(): Gắn sự kiện chuột để di chuyển hoặc đặt chữ ký lên canvas.
3.2. Chọn và hiển thị file PDF (filepdf_pdf)
Phương thức này sử dụng filedialog.askopenfilename để mở file PDF từ thiết bị.
Khi chọn thành công, phương thức render_page sẽ được gọi để hiển thị nội dung
trang đầu tiên của PDF trên canvas.
3.3. Tải hình ảnh chữ ký (hinhanh_signature)
Đọc file ảnh: Sử dụng Pillow để mở file ảnh chữ ký (PNG, JPG).
Chuyển đổi và thay đổi kích thước:
‐ Hình ảnh được chuyển sang định dạng PNG để đảm bảo tương thích với PDF.
‐ Ảnh được thu nhỏ với kích thước tối đa 100x100 để phù hợp hiển thị trên canvas.
Hiển thị chữ ký trên canvas:
‐ Sử dụng self.canvas.create_image để hiển thị ảnh chữ ký tại vị trí mặc định (50, 50).
‐ Người dùng có thể kéo thả ảnh này bằng chuột.
3.4. Hiển thị trang PDF (render_page) Mở file PDF: Sử dụng PyMuPDF để đọc file.
Chuyển trang PDF thành hình ảnh:
‐ Sử dụng phương thức get_pixmap của PyMuPDF để lấy hình ảnh trang hiện tại.
‐ Hình ảnh được resize để phù hợp với kích thước canvas (1000x750). Hiển thị trên canvas:
‐ Ảnh trang PDF được vẽ lên canvas bằng self.canvas.create_image.
3.5. Di chuyển và đặt chữ ký lên PDF Move_signature(self, event):
‐ Cho phép người dùng di chuyển ảnh chữ ký trên canvas khi kéo chuột (sự kiện ).
‐ Cập nhật vị trí chữ ký mới (tọa độ x, y trên canvas). Place_signature(self, event):
Cố định vị trí chữ ký trên canvas khi người dùng thả chuột (sự kiện ).
3.6. Lưu file PDF với chữ ký (save_pdf) Xác định vị trí chữ ký trên file PDF:
‐ Dựa trên tọa độ chữ ký trên canvas, tính toán tọa độ tương ứng trên PDF bằng
cách quy đổi tỷ lệ giữa canvas và PDF thật. Chèn chữ ký vào PDF:
‐ Sử dụng insert_image của PyMuPDF để chèn hình ảnh chữ ký vào trang PDF.
‐ Vùng chữ ký được xác định bằng một hình chữ nhật xung quanh vị trí đã chỉ định. Lưu PDF mới:
‐ Sử dụng filedialog.asksaveasfilename để lưu file PDF đã chỉnh sửa vào thiết bị.
3.7. Chuyển đổi giữa các trang (tien_page và lui_page) tien_page(self): Tăng
chỉ số trang hiện tại để hiển thị trang tiếp theo. Gọi
lại phương thức render_page để cập nhật nội dung canvas.
lui_page(self): Giảm chỉ số trang hiện tại để quay lại trang trước.
IV. Quy Trình Giải Thuật Xử Lý
Để thực hiện việc chèn chữ ký vào file PDF, ứng dụng được thiết kế với quy trình
xử lý rõ ràng và hiệu quả. Đầu tiên, người dùng sẽ chọn file PDF cần chỉnh sửa
thông qua giao diện, sử dụng thư viện tkinter để mở cửa sổ chọn file và lưu đường
dẫn file. Sau đó, thư viện PyMuPDF (fitz) được sử dụng để hiển thị trang PDF
đầu tiên trên giao diện. Các thông tin như kích thước trang PDF cũng được lấy ra
để đảm bảo các thao tác xử lý sau này được chính xác.
Khi người dùng tải lên hình ảnh chữ ký, ứng dụng sử dụng thư viện Pillow (PIL)
để đọc và xử lý hình ảnh. Hình ảnh chữ ký được chuyển đổi sang định dạng PNG
nếu cần, sau đó được thu nhỏ để phù hợp với giao diện. Chữ ký này được hiển
thị trên canvas bằng thư viện Tkinter, và người dùng có thể di chuyển chữ ký tới
vị trí mong muốn trên trang PDF thông qua thao tác kéo thả chuột. Các sự kiện
chuột như di chuyển và thả được theo dõi để xác định tọa độ chính xác của chữ ký.
Khi hoàn tất chỉnh sửa, ứng dụng thực hiện chuyển đổi tọa độ chữ ký từ canvas
sang tọa độ thực tế trên PDF dựa trên kích thước tỉ lệ của trang PDF. Sau đó, với
sự hỗ trợ của PyMuPDF, chữ ký được chèn vào trang PDF tại vị trí được chỉ định.
Tiếp theo, ứng dụng cho phép người dùng lưu file PDF mới với chữ ký đã được
chèn thông qua cửa sổ lưu file.
Ngoài ra, ứng dụng hỗ trợ tính năng điều hướng giữa các trang PDF để người
dùng có thể chèn chữ ký trên nhiều trang. Quy trình này đảm bảo tính chính xác
cao, nhờ vào sự kết hợp chặt chẽ giữa các thư viện PyMuPDF, Pillow và Tkinter. V. Kết Luận
Kết quả đạt được
Qua quá trình xây dựng ứng dụng chèn chữ ký vào file PDF, em đã tiếp cận và
làm quen với các thư viện xử lý file PDF, giao diện đồ họa và xử lý hình ảnh
trong Python. Ứng dụng đã hoàn thiện các chức năng chính như hiển thị nội dung
từng trang của file PDF trên giao diện, hỗ trợ người dùng tải và chỉnh sửa hình
ảnh chữ ký để hiển thị trực tiếp lên file PDF. Ngoài ra, ứng dụng còn cho phép
chèn chữ ký vào vị trí mong muốn, lưu lại file PDF đã chỉnh sửa và cung cấp tính
năng chuyển đổi linh hoạt giữa các trang. Giao diện được xây dựng theo hướng
đơn giản, trực quan, dễ sử dụng, đáp ứng các thao tác cơ bản một cách hiệu quả.
Hạn chế
Tuy đã đạt được những kết quả khả quan, ứng dụng vẫn còn một số hạn chế cần
khắc phục. Cụ thể, chức năng xử lý chữ ký chỉ hỗ trợ các định dạng ảnh cơ bản
như PNG và JPG, chưa mở rộng được sang các định dạng phổ biến khác. Việc
hiển thị file PDF có thể chưa được tối ưu khi xử lý các file có dung lượng lớn
hoặc nhiều trang. Bên cạnh đó, giao diện hiện tại chưa phù hợp để sử dụng trên
các thiết bị di động hoặc màn hình nhỏ, gây ra bất tiện trong một số trường hợp.
Ngoài ra, ứng dụng cũng chưa tích hợp tính năng bảo mật hoặc xác thực người
dùng, điều này có thể gây ra rủi ro khi sử dụng trong môi trường chuyên nghiệp.
Hướng phát triển
Ứng dụng sẽ được phát triển theo nhiều hướng để cải thiện tính năng và trải
nghiệm người dùng. Trước tiên, cần nâng cấp khả năng hỗ trợ các định dạng chữ
ký như SVG hoặc BMP, đồng thời tối ưu hóa tốc độ xử lý các file PDF phức tạp.
Về giao diện, cần nâng cấp để phù hợp hơn với các thiết bị di động và màn hình
cảm ứng, giúp ứng dụng linh hoạt hơn trong nhiều môi trường sử dụng. Ngoài ra,
việc bổ sung các tính năng bảo mật, như xác thực người dùng hoặc mã hóa file,
sẽ giúp tăng độ an toàn và đáng tin cậy cho ứng dụng. Bên cạnh đó, tích hợp thêm
chức năng lưu lịch sử chỉnh sửa file và hỗ trợ quản lý các file đã xử lý sẽ mang
lại tiện ích lớn hơn cho người dùng. Việc nghiên cứu các công nghệ mới nhằm
mở rộng khả năng hỗ trợ nhiều định dạng file PDF sẽ là bước đi quan trọng trong
định hướng phát triển lâu dài của ứng dụng.