Xuất tệp docx bằng python-docx trong ứng dụng Django

Tram Ho

Xuất tệp là một tính năng thường xuyên xảy ra nơi người dùng có thể lấy dữ liệu của họ ra.

Là phần phụ trợ, ứng dụng Django của tôi có thể giúp tôi xuất tệp docx bằng cách sử dụng thư viện có tên python-docx.

Cài đặt python-docx và nhận kiến ​​thức cơ bản

Cài đặt python-docx cực kỳ đơn giản với một lệnh:

pip cài đặt python-docx

Nếu bạn đang làm việc trên Docker và có một tập tin requirement.txt nơi bạn thêm tất cả libs của bạn trên đó, đừng quên thêm “python-docx” phiên bản với nó.

Bạn có thể tải chính xác phiên bản đã cài đặt bằng cách gọi lệnh “pip freeze” để lấy danh sách tên và phiên bản libs, sau đó tìm phiên bản python-docx.

python-docx == 0,8.10

Trước khi đi vào chi tiết về cách chúng tôi tạo chế độ xem để xuất tệp docx bằng python-docx. Sẽ hữu ích nếu bạn có thể xem qua tài liệu chính thức của python-docx trước.

Thực hiện chế độ xem để xuất tệp docx

Như thường lệ, để tạo một API để tải xuống, chúng tôi viết một chế độ xem chỉ cho phép phương thức GET.

Sau khi tạo một tài liệu trống, chúng ta cần lưu chúng và gửi nó đến phản hồi. Python-docx có phương thức Document.save () chấp nhận một luồng thay vì tên tệp. Do đó, chúng ta có thể khởi tạo một đối tượng io.BytesIO () để lưu thông tin tài liệu, sau đó kết xuất nó cho người dùng.

Chúng tôi sử dụng StreamingHttpResponse để tải dữ liệu nặng và sử dụng content_type “application / vnd.openxmlformats-officedocument.wordprocessingm” cho tệp docx.

Tại thời điểm này, chúng tôi có thể tải xuống tên tệp .docx Test.docx và xem nội dung trống trong đó.

Xây dựng nội dung chi tiết cho tài liệu

Sau bước tải xuống tệp docx trống, chúng tôi bắt đầu xây dựng nội dung cho docx. Mời bạn theo dõi tài liệu của python-docx.

Về cơ bản, bạn có thể thêm văn bản tiêu đề bằng cách sử dụng phương thức “document.add_heading ()” và một số đoạn văn bằng cách sử dụng phương thức “document.add_paragraph ()”.

Nếu bạn muốn định kiểu văn bản, bạn có thể thêm_run vào một đoạn văn.

Ví dụ: tôi đã tạo phương thức build_document () để xây dựng tất cả nội dung trong tài liệu:

thì tôi sẽ thay thế việc tạo một tài liệu trống trong dạng xem bằng cách:

document = self.build_document ()

Và đây là kết quả xuất cho bây giờ:

Xây dựng nội dung html bằng cách sử dụng HTMLParser trong tài liệu

Về cơ bản, tôi có thể xuất tệp docx trong nội dung trong đó. Fistly, tôi chỉ cần thêm nó vào trong đoạn văn:

Nhưng có một màn hình kỳ lạ khi tôi lưu trường dưới dạng html.

Vì vậy, tôi cần tìm ra cách để chuyển đổi nội dung HTML thành văn bản và giữ cho nó kiểu cơ bản như in nghiêng, in đậm hoặc dấu đầu dòng, như sau:

Sau một số nghiên cứu, tôi biết có một python lib có tên “ html.parser – Phân tích cú pháp HTML và XHTML đơn giản ” và làm theo một ví dụ để tạo một lớp có tên DocumentHTMLParser để xử lý nó như sau:

Nói chung, đoạn mã trên, chúng ta sẽ ghi đè hàm trong lớp HTMLParser, sau đó sử dụng chạy đoạn văn thành kiểu tùy chỉnh bằng cách bật thẻ bắt đầu. Nếu thẻ cần ngắt ở cuối thì chúng tôi thêm dấu ngắt cho nó.

Sau đó, tôi sử dụng lớp tùy chỉnh này trong chế độ xem của mình để xử lý nội dung html:

Và đây là kết quả trên docx của nội dung html:

Xuất trong ứng dụng Django rất thú vị và Python cũng có nhiều thư viện hữu ích để xử lý định dạng nội dung.

Chúng ta chỉ xem qua một ví dụ đơn giản về xuất tệp docx trong ứng dụng Django. Nếu bạn biết cách khác tốt hơn và / hoặc bất kỳ điều gì có vẻ không ổn, vui lòng cho tôi biết trong phần bình luận.

Như thường lệ,nguồn gốc của bài đăng này là trên blog cá nhân của tôi

Cảm ơn bạn,

BeautyOnCode

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo