Cách tạo báo cáo pdf trong python
Nếu công việc của bạn liên quan đến việc tạo báo cáo PDF, hóa đơn, v.v. bạn có thể đã nghĩ về việc tự động hóa điều đó với Python. Python có một số thư viện tuyệt vời để làm việc với tệp PDF, cho phép bạn đọc và viết tệp PDF từ tập lệnh. Nhưng bạn cũng có thể sử dụng các thư viện này làm công cụ GUI đơn giản cơ bản, giúp bạn dễ dàng tự động điền hoặc chỉnh sửa báo cáo PDF trên màn hình Show Trong hướng dẫn này, chúng ta sẽ sử dụng hai thư viện để tạo bộ điền báo cáo PDF tùy chỉnh. Dữ liệu sẽ được thu thập bằng biểu mẫu Qt. chỉ cần chỉnh sửa các trường, nhấn "Tạo" để nhận biểu mẫu đã điền trong thư mục. Hai thư viện chúng ta sẽ sử dụng ở đây là --
Mặc dù chúng tôi có thể sử dụng reportlab để vẽ toàn bộ tệp PDF, nhưng việc thiết kế mẫu bằng các công cụ bên ngoài sẽ dễ dàng hơn và sau đó chỉ cần phủ nội dung động lên mẫu này. Chúng tôi có thể sử dụng 6 để đọc tệp PDF mẫu của mình và sau đó trích xuất một trang, sau đó chúng tôi có thể vẽ lên đó bằng cách sử dụng 7. Điều đó cho phép chúng tôi phủ thông tin tùy chỉnh (từ ứng dụng của chúng tôi) trực tiếp lên mẫu PDF hiện có mà chúng tôi lưu dưới tên mớiTrong ví dụ này, chúng tôi đang nhập các trường theo cách thủ công nhưng bạn có thể sửa đổi ứng dụng để đọc dữ liệu cho tệp PDF từ tệp CSV bên ngoài và tạo nhiều tệp PDF từ tệp đó Mẫu PDFĐể thử nghiệm, tôi đã tạo mẫu báo cáo TPS tùy chỉnh bằng Google Tài liệu và tải trang xuống dưới dạng PDF. Trang chứa một số trường sẽ được điền. Trong hướng dẫn này, chúng tôi sẽ viết một biểu mẫu PyQt mà người dùng có thể điền vào và sau đó viết dữ liệu đó ra PDF ở đúng vị trí Mẫu ở định dạng A4. Lưu nó vào cùng thư mục với tập lệnh của bạn Nếu bạn có một mẫu khác mà bạn muốn sử dụng, vui lòng sử dụng mẫu đó. Chỉ cần nhớ rằng bạn sẽ cần điều chỉnh vị trí của các trường biểu mẫu khi viết nó Bố trí dạng xem Biểu mẫuQt bao gồm bố cục 8 giúp đơn giản hóa quy trình tạo bố cục biểu mẫu đơn giản. Nó hoạt động tương tự như một lưới, nhưng bạn có thể thêm các hàng phần tử lại với nhau và các chuỗi được chuyển đổi tự động thành các đối tượng 9. Ứng dụng khung của chúng tôi, bao gồm bố cục đầy đủ phù hợp với biểu mẫu mẫu (ít nhiều) được hiển thị bên dưới
trăn
trăn
trăn
trăn
Khi viết các công cụ để thay thế/tự động hóa các biểu mẫu giấy, bạn nên thử bắt chước bố cục của biểu mẫu giấy sao cho quen thuộc. Ở trên sẽ cho chúng ta bố cục như sau trong một cửa sổ khi chạy. Bạn đã có thể nhập nội dung vào các trường, nhưng việc nhấn nút sẽ không làm được gì cả -- chúng tôi chưa viết mã để tạo tệp PDF hoặc nối nó với nút Tạo PDFĐể tạo PDF bằng mẫu cơ sở, chúng tôi sẽ kết hợp 7 và 1. Quá trình này như sau --
Mã được hiển thị bên dưới, mã này không yêu cầu Qt, bạn có thể lưu vào một tệp và chạy nguyên trạng. Khi chạy tệp PDF kết quả sẽ được lưu dưới dạng 7 trong cùng một thư mụctrăn 6Vì quá trình tạo PDF đang thực hiện IO nên có thể mất một chút thời gian (e. g. nếu chúng tôi tải tệp từ ổ đĩa mạng). Do đó, tốt hơn là xử lý vấn đề này trong một chủ đề riêng biệt. Tiếp theo, chúng ta sẽ xác định trình chạy chuỗi tùy chỉnh này Chạy thế hệ trong một chủ đề riêng biệtVì mỗi thế hệ là một công việc biệt lập, nên sử dụng khung công tác 8 của Qt để xử lý quy trình -- điều này cũng giúp đơn giản hóa việc thêm các mẫu có thể tùy chỉnh cho mỗi công việc sau này. Chúng tôi đang sử dụng cùng một cách tiếp cận đã thấy trong hướng dẫn Đa luồng nơi chúng tôi sử dụng một lớp con của 8 để giữ mã chạy tùy chỉnh của chúng tôi và triển khai các tín hiệu dành riêng cho người chạy trên một lớp con riêng biệt của 60
trăn 0trăn 1trăn 2trăn 3Chúng tôi đã xác định hai tín hiệu ở đây
Chúng tôi cần một 63 để thêm trình chạy tùy chỉnh của chúng tôi vào. Chúng tôi có thể thêm phần này vào khối 64 của chúng tôi trong khối 65trăn 9Bây giờ chúng ta đã xác định trình tạo 8, chúng ta chỉ cần triển khai phương thức 67 để tạo trình chạy, truyền dữ liệu từ các trường biểu mẫu của chúng ta và bắt đầu chạy trình tạotrăn 0Trong mã này, trước tiên chúng tôi vô hiệu hóa 68 để người dùng không thể nhấn nút nhiều lần trong khi quá trình tạo đang diễn ra. Sau đó, chúng tôi xây dựng một từ điển dữ liệu từ các vật dụng của mình, sử dụng phương pháp 69 để lấy văn bản từ các vật dụng của 00, 01 để lấy giá trị từ 02 và 03 để lấy biểu diễn văn bản thuần túy của 04. Chúng tôi chuyển đổi giá trị số thành một chuỗi, vì chúng tôi đang đặt văn bảnĐể thực sự tạo tệp PDF, chúng tôi tạo một phiên bản của trình chạy 05 mà chúng tôi vừa xác định, chuyển vào từ điển dữ liệu. Chúng tôi kết nối tín hiệu 61 với phương thức 07 của chúng tôi (được xác định ở dưới cùng, nhưng chưa làm gì cả) và tín hiệu 62 với hàm 09 tiêu chuẩn của Python. điều này sẽ tự động in bất kỳ lỗi nào ra bàn điều khiểnCuối cùng, chúng tôi lấy phiên bản 05 của mình và chuyển nó sang phương thức 11 của nhóm luồng của chúng tôi để xếp hàng cho nó chạy (nó sẽ bắt đầu ngay lập tức). Sau đó, chúng tôi có thể kết nối phương thức này với nút của chúng tôi trong 65 của cửa sổ chính của chúng tôi. gtrăn 1Nếu bạn chạy ứng dụng ngay bây giờ, việc nhấn nút sẽ kích hoạt quá trình tạo tệp PDF và kết quả sẽ được lưu dưới dạng 7 trong cùng thư mục khi bạn khởi động ứng dụng. Cho đến nay, chúng tôi chỉ đặt một khối văn bản duy nhất trên trang, vì vậy hãy hoàn thành trình tạo để viết tất cả các trường của chúng tôi vào đúng vị tríhoàn thiện máy phát điệnTiếp theo, chúng ta cần hoàn thành việc đặt văn bản trên mẫu. Mẹo ở đây là tìm ra khoảng cách trên mỗi dòng cho mẫu của bạn (tùy thuộc vào kích thước phông chữ, v.v. ) và sau đó tính toán các vị trí tương ứng với dòng đầu tiên. Các tọa độ y tăng lên trên trang (vì vậy 0,0 là dưới cùng bên trái) vì vậy trong mã của chúng tôi trước đây, chúng tôi xác định 14 cho dòng trên cùng và sau đó trừ 28 cho mỗi dòngtrăn 2góiĐối với hầu hết các trường biểu mẫu của chúng tôi, chúng tôi chỉ có thể xuất văn bản nguyên trạng vì không có ngắt dòng. Nếu văn bản đã nhập quá dài thì nó sẽ tràn -- nhưng nếu muốn, chúng tôi có thể giới hạn điều này trên chính các trường bằng cách đặt độ dài tối đa bằng ký tự, e. g trăn 3Đối với trường nhận xét, mọi thứ phức tạp hơn một chút. Trường có thể dài hơn nhiều và các dòng cần được bao bọc trên nhiều dòng trong mẫu. Trường này cũng chấp nhận ngắt dòng (bằng cách nhấn Enter) gây ra sự cố khi ghi ra PDF Như bạn có thể thấy trong ảnh chụp màn hình ở trên, các ngắt dòng xuất hiện dưới dạng các ô vuông màu đen trong văn bản. Tin tốt là chỉ cần loại bỏ các ngắt dòng sẽ giúp bạn dễ dàng ngắt dòng hơn. chúng ta chỉ có thể bọc từng dòng thành một số ký tự được chỉ định Vì các ký tự có chiều rộng thay đổi nên điều này không hoàn hảo, nhưng nó không thành vấn đề. Nếu chúng ta ngắt dòng cho một dòng có đầy đủ các ký tự rộng nhất (W) thì bất kỳ dòng thực nào cũng phù hợp Python đi kèm với thư viện 15 được tích hợp sẵn, mà chúng ta có thể sử dụng để ngắt dòng văn bản của mình sau khi chúng ta đã loại bỏ các dòng mớitrăn 4Nhưng chúng ta cần tính đến việc dòng đầu tiên ngắn hơn, điều mà chúng ta có thể thực hiện bằng cách gói đầu tiên đến độ dài ngắn hơn, nối lại phần còn lại và gói lại, e. g trăn 5Các dấu nhận xét trên các dòng bao quanh (45 & 55) hiển thị chiều dài bao cần thiết để vừa một dòng chữ W vào khoảng trống. Đây là dòng ngắn nhất có thể, nhưng không thực tế. Các giá trị được sử dụng sẽ hoạt động với hầu hết văn bản bình thường Để làm điều này đúng cách, chúng ta nên tính toán kích thước thực tế của từng độ dài văn bản trong phông chữ tài liệu và sử dụng kích thước đó để thông báo cho trình bao bọc Khi chúng tôi đã chuẩn bị xong các dòng, chúng tôi có thể in chúng lên PDF bằng cách lặp qua danh sách và giảm vị trí y cho mỗi lần. Khoảng cách giữa các dòng trong tài liệu mẫu của chúng tôi là 28 trăn 6Điều này cho kết quả sau với một số văn bản lorem ipsum mẫu Hơn 10.000 nhà phát triển đã mua Tạo ứng dụng GUI bằng Python & Qt Thông tin thêm Nhận sách Để hỗ trợ các nhà phát triển ở [[ countryRegion ]], tôi giảm giá [[ localizedDiscount[couponCode] ]]% với mã [[ couponCode ]] — Tận hưởng Đối với [[ activeDiscount. mô tả ]] Tôi đang đưa ra [[ activeDiscount. giảm giá ]]% giảm giá với mã [[ couponCode ]] — Tận hưởng Cũng có sẵn qua GumroadLeanpub Tự động hiển thị kết quảKhi tệp được tạo, trình chạy của chúng tôi sẽ trả về tên tệp của tệp đã tạo trong một tín hiệu (hiện tại nó luôn giống nhau). Sẽ rất tuyệt nếu trình bày bản PDF kết quả cho người dùng một cách tự động để họ có thể kiểm tra xem mọi thứ có ổn không. Trên Windows, chúng tôi có thể sử dụng 16 để mở tệp bằng trình khởi chạy mặc định cho loại đó -- trong trường hợp này là mở tệp PDF bằng trình xem PDF mặc địnhVì tính năng này không khả dụng trên các nền tảng khác nên chúng tôi sẽ phát hiện lỗi và thay vào đó hiển thị 17trăn 7Hoàn thành mãMã hoàn chỉnh cho PyQt5, PySide2, PyQt6 hoặc PySide6 được hiển thị bên dưới
trăn 8trăn 9trăn 0trăn 1Tạo từ tệp CSVTrong ví dụ trên bạn cần gõ dữ liệu để điền thủ công. Điều này tốt nếu bạn không có nhiều tệp PDF để tạo, nhưng sẽ không thú vị lắm nếu bạn có toàn bộ tệp CSV có giá trị dữ liệu để tạo báo cáo cho. Trong ví dụ bên dưới, thay vì trình bày danh sách các trường biểu mẫu cho người dùng, chúng tôi chỉ yêu cầu tệp CSV nguồn từ đó có thể tạo tệp PDF -- mỗi hàng trong tệp tạo một tệp PDF riêng bằng cách sử dụng dữ liệu trong tệp
trăn 2trăn 3trăn 4trăn 5Bạn có thể chạy ứng dụng này bằng cách sử dụng 2 và tệp CSV ví dụ này để tạo một vài báo cáo TPSNhững điều cần chú ý --
cải tiến có thểNếu bạn muốn cải thiện mã này, có một vài điều bạn có thể thử
Rất tốt, bạn đã hoàn thành hướng dẫn này. Đánh dấu là hoàn thành [[ người dùng. hoàn thành. độ dài ]] đã hoàn thành [[ người dùng. vệt+1 ]] vệt ngày Để có hướng dẫn đầy đủ về xây dựng ứng dụng GUI bằng Python, hãy xem hướng dẫn PyQt6 của chúng tôi. Sử dụng thư viện khác? Làm cách nào để tạo tệp PDF bằng Python?Cách dễ dàng tạo tệp PDF bằng Python . Bước 1. Tạo một mẫu HTML với trình giữ chỗ. Trước tiên, chúng ta cần tạo một tài liệu HTML mà sau này chúng ta sẽ sử dụng làm mẫu. . Bước 2. Tạo một biến Python cho mỗi trình giữ chỗ. . Bước 3. Tạo môi trường cho mẫu của chúng tôi và xuất PDF Làm cách nào để tạo báo cáo bằng Python?Chúng ta đang tạo báo cáo HTML giống như ví dụ trước, nhưng cú pháp của mẫu của Jinja khác với chuỗi Python. Bạn có thể đọc thêm về cú pháp của nó tại đây. . Tạo một đối tượng Môi trường mẫu, đối tượng này sẽ được sử dụng để tải các mẫu. . Tải mẫu từ Môi trường. . Kết xuất mẫu với các biến Làm cách nào để tạo PDF từ cơ sở dữ liệu bằng Python?Kết nối với Cơ sở dữ liệu Oracle và trích xuất dữ liệu bằng thư viện cx_Oracle. Sử dụng Pandas Dataframes để thao tác dữ liệu. Sử dụng Matplotlib để tạo biểu đồ. Sử dụng ExcelWriter và ReportLab để xuất ở định dạng Excel hoặc PDF. . @Nguai al Bạn đã thử python -m pip install fpdf để cài đặt thư viện fpdf chưa?. "pip cài đặt fpdf" đã hoạt động |