2009-03-12 30 views
13

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

+1

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

Trả lời

11

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.

+0

Hình ảnh có hiển thị bình thường với cách tiếp cận đó không? – Joril

+0

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

+0

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

1

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 
+0

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

4

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)) 
+0

chỉ hoạt động nếu bạn có nhiều thẻ – jake77

Các vấn đề liên quan