Tôi đang cố gắng thêm một "trang x của y" đơn giản vào báo cáo được thực hiện với ReportLab .. Tôi đã tìm thấy this old post về điều đó, nhưng có thể sáu năm sau, điều gì đó đơn giản hơn đã xuất hiện? ^^;
tôi thấy this recipe quá, nhưng khi tôi sử dụng nó, kết quả PDF thiếu những hình ảnh ..Hiển thị số trang với ReportLab
Trả lời
Tôi đã có thể triển khai phương pháp NumberedCanvas từ ActiveState. Nó rất dễ làm và không thay đổi nhiều mã hiện tại của tôi. Tất cả những gì tôi phải làm là thêm lớp NumberedCanvas và thêm thuộc tính canvasmaker khi xây dựng tài liệu của tôi. Tôi cũng thay đổi các số đo của nơi "x của y" được trưng bày:
self.doc.build(pdf)
trở thành
self.doc.build(pdf, canvasmaker=NumberedCanvas)
doc là một BaseDocTemplate và pdf là danh sách các yếu tố chaûy.
Hình ảnh có hiển thị bình thường với cách tiếp cận đó không? – Joril
Tôi có hình ảnh hiển thị trên pdf mà không có bất kỳ vấn đề gì. Nếu bạn đang gặp vấn đề với hình ảnh, bạn có thể xây dựng hoặc bắt đầu một câu hỏi mới không? – adam
Dường như kỹ thuật này phá vỡ các liên kết trong tài liệu. Khi tôi sử dụng nó, tất cả các liên kết từ một phần của tài liệu đến một phần khác bắt đầu điều hướng đến một phần xuống trang đầu tiên, thay vì đi đến các mục tiêu thực tế của chúng. – CoreDumpError
Chỉ cần đào lên một số mã cho bạn, chúng tôi sử dụng này:
SimpleDocTemplate(...).build(self.story,
onFirstPage=self._on_page,
onLaterPages=self._on_page)
Bây giờ self._on_page
là một phương pháp được gọi cho mỗi trang như:
def _on_page(self, canvas, doc):
# ... do any additional page formatting here for each page
print doc.page
Có nhưng phần khó khăn là làm thế nào để tìm ra phần "của y" :) Đó là, tổng số trang – Joril
sử dụng doc.multiBuild
và trong phương pháp tiêu đề trang (được định nghĩa bởi "onLaterPages ="):
global TOTALPAGES
if doc.page > TOTALPAGES:
TOTALPAGES = doc.page
else:
canvas.drawString(270 * mm, 5 * mm, "Seite %d/%d" % (doc.page,TOTALPAGES))
chỉ hoạt động nếu bạn có nhiều thẻ – jake77
Tôi có vấn đề này như vậy. Đây là công thức từ ActiveState sử dụng NumberedCanvas mà thực sự hoạt động: http://code.activestate.com/recipes/576832/ – Esteban