Bạn nên tạo chế độ xem sẽ chuyển đổi tệp PDF từ HTML. Để lưu trữ tạm thời tệp PDF của bạn, hãy sử dụng thư viện cStringIO sẽ cung cấp giao diện đối tượng giống như tệp hiệu quả. Đặt tệp HTML đầu ra phải được chuyển đổi thành PDF và tệp sẽ nhận kết quả cuối cùng. Sau đó, bạn nên đặt đối tượng HttpResponse có tiêu đề phù hợp và nhập lệnh sẽ nhận giá trị từ bộ đệm StringIO và hiển thị dưới dạng phản hồi
Cách chuyển đổi HTML sang PDF bằng Python với WeasyPrint
WeasyPrint là một công cụ hiển thị hình ảnh khác có thể xuất nội dung HTML/CSS sang PDF. Trọng tâm chính của nó là hỗ trợ các tiêu chuẩn web để in thêm. WeasyPrint là một công cụ miễn phí có sẵn để tải xuống và sử dụng theo giấy phép BSD. Giải pháp sử dụng các thư viện khác nhau nhưng không dựa trên một công cụ kết xuất cụ thể, chẳng hạn như Gecko hoặc Webkit. Công cụ bố trí CSS của WeasyPrint dựa trên Python và nó hỗ trợ 2. 7 và 3. 3 phiên bản Python trở lên. Điều đáng chú ý là công cụ này được tạo riêng cho các tác vụ phân trang. Ngoài ra, WeasyPrint hỗ trợ Django
Đặc trưng
The tool supports common HTML and CSS files, data URIs, FTP, and HTTP. It means that WeasyPrint supports HTTP redirects, but it does not support more complex features, such as authentication or cookies. The solution also supports CSS stylesheets both linked by the element and embedded in the element. When it comes to images, WeasyPrint supports various elements, such as , , and , and image formats, including:
- JPEG,
- GIF,
- SVG,
- và PNG
Tuy nhiên, công cụ này không rasterize hình ảnh SVG. Thay vào đó, nó hiển thị các hình ảnh đó dưới dạng vectơ trong tệp PDF đầu ra
Hơn nữa, WeasyPrint hỗ trợ tệp đính kèm, dấu trang và siêu liên kết. Công cụ hiển thị các siêu liên kết có thể nhấp được trong trường hợp bạn đang sử dụng trình xem PDF tiện lợi. WeasyPrint hỗ trợ cả neo nội bộ [] và siêu liên kết bên ngoài. Công cụ này thường hiển thị dấu trang trong thanh bên và nhúng tệp đính kèm trong tệp PDF đã chuyển đổi
Cài đặt
Vì WeasyPrint chứa nhiều phần phụ thuộc nên bạn có thể dễ dàng cài đặt nó bằng cách chạy lệnh pip khi sử dụng Python để tạo PDF
________1_______
Sau đó, bạn nên làm cho công cụ có thể thực thi được bằng cách nhập mã sau sẽ hiển thị trong phiên bản WeasyPrint của bạn
________2_______
Tạo tệp PDF
Để chuyển đổi nội dung HTML/CSS thành PDF mà không có bất kỳ thay đổi nào, bạn chỉ cần nhập mã sau
________3_______
Nếu bạn cần thay đổi kiểu nội dung của mình trong tệp PDF trong tương lai, bạn phải đặt biểu định kiểu của mình
từ weasyprint nhập HTML, CSS
HTML[‘http. //địa_chỉ_website_của_bạn. tổ chức/’]. write_pdf[‘/path_for_storing_your_PDF/file_name. pdf',
stylesheets=[CSS[string=’body { font-color. màu đỏ }']]]
Các ví dụ sử dụng WeasyPrint được đề cập dưới đây sẽ cho phép bạn chuyển đổi các tệp PDF, ngay cả khi một số thay đổi được yêu cầu
Được cấp phép theo Giấy phép Apache, Phiên bản 2. 0 ["Giấy phép"]; bạn không được sử dụng tệp này trừ khi tuân thủ Giấy phép. Bạn có thể lấy một bản sao của Giấy phép tại
________0_______
Trừ khi luật hiện hành yêu cầu hoặc được đồng ý bằng văn bản, phần mềm được phân phối theo Giấy phép sẽ được phân phối trên CƠ SỞ "NGUYÊN TRẠNG", KHÔNG CÓ BẢO ĐẢM HAY ĐIỀU KIỆN DƯỚI BẤT KỲ HÌNH THỨC NÀO, rõ ràng hay ngụ ý. Xem Giấy phép để biết các quyền và giới hạn quản lý ngôn ngữ cụ thể theo Giấy phép
def pdf_workup[yêu cầu, pk]. wu = get_object_or_404[mô hình. Làm việc, pk=pk] active_provider_type = get_object_or_404[ProviderType, pk=request. phiên ['clintype_pk']] nếu active_provider_type. staff_view. dữ liệu = {'làm việc'. wu} mẫu = get_template['workup/workup_body. html'] html = mẫu. tệp kết xuất [dữ liệu] = Tệp tạm thời [chế độ = "w + b"] pisa. TạoPDF[html. mã hóa ['utf-8'], tệp đích = tệp, mã hóa = 'utf-8']. tìm kiếm [0] pdf = tệp. Đọc tài liệu. close[] viết tắt = ''. tham gia[tên[0]. upper[] cho tên trong wu. bệnh nhân. tên[reverse=False, middle_short=False]. split[]] định dạng = '. '. tham gia[[str[wu. ngày khám bệnh. ngày khám bệnh. tháng]. zfill[2], str[wu. ngày khám bệnh. ngày khám bệnh. ngày]. zfill[2], str[wu. ngày khám bệnh. ngày khám bệnh. năm]]] tên tệp = ''. tham gia[[tên viết tắt, ' [', ngày định dạng, ']']] phản hồi = HttpResponse[pdf, 'application/pdf'] phản hồi["Bố trí nội dung"] = "tệp đính kèm; tên tệp=%s. pdf" % [tên tệp,] trả về phản hồi khác. trả về HttpResponseRedirect[reverse['workup', args=[wu. Tôi,]]]def convert[self, document, format=None, output_filename=None, delete_on_close=True]. nếu tài liệu. định dạng. = 'html'. nâng cao ConverterError[u'xhtml2pdf does not support %s input format' % document. định dạng] nếu định dạng. = 'pdf'. tăng ConverterError[u'xhtml2pdf không hỗ trợ định dạng đầu ra %s' % format] output_filename, format = Guess_format_and_filename[output_filename, format] input_file = document input_filename = document. tên đầu ra_tệp = mở[tên_tệp đầu ra, 'wb'] kết quả = pisa. pisaDocument[ input_file, output_file, path=input_filename, encoding='UTF-8', ] output_file. close[] nếu kết quả. sai lầm. err_msg = 'Lỗi hiển thị %s. %s' % [tên_tệp đầu vào, kết quả. err] tăng ConverterError[err_msg] fd = Document[output_filename, mode='rb', delete_on_close=delete_on_close] return fd