2009-03-12 15 views
13

Próbuję dodać prostą "stronę x y" do raportu przygotowanego za pomocą ReportLab .. Znalazłem o tym this old post, ale być może sześć lat później pojawiło się coś bardziej prostego? ^^;
znalazłem this recipe też, ale kiedy go używać, otrzymany PDF brakuje obrazów ..Wyświetlanie liczby stron za pomocą ReportLab

+1

miałem ten sam problem. Oto przepis z ActiveState wykorzystujący NumberedCanvas, który działa: http://code.activestate.com/recipes/576832/ – Esteban

Odpowiedz

11

Udało mi się wdrożyć podejście NumberedCanvas z ActiveState. Było to bardzo łatwe i niewiele zmieniło mojego istniejącego kodu. Jedyne, co musiałem zrobić, to dodać klasę NumberedCanvas i dodać atrybut canvasmaker podczas budowania mojego dokumentu. Ja również zmienił pomiary gdzie został wyświetlony "X z Y":

self.doc.build(pdf) 

stał

self.doc.build(pdf, canvasmaker=NumberedCanvas) 

doc jest BaseDocTemplate i pdf jest moja lista elementów płynnych.

+0

Czy obrazy pokazywały się normalnie przy takim podejściu? – Joril

+0

Mam obrazy wyświetlające się w pdf bez żadnych problemów. Jeśli masz problem z obrazami, możesz opracować lub rozpocząć nowe pytanie? – adam

+0

Wygląda na to, że technika ta łamie linki wewnątrz dokumentu. Kiedy go użyłem, wszystkie linki z jednej części dokumentu do innej części zaczęły się przesuwać w stronę pierwszej strony, a nie do rzeczywistych celów. – CoreDumpError

1

Wystarczy wykopaniu jakiś kod dla ciebie, używamy tego:

SimpleDocTemplate(...).build(self.story, 
          onFirstPage=self._on_page, 
          onLaterPages=self._on_page) 

Teraz self._on_page jest metoda która jest wywoływana dla każdej strony takiej jak:

def _on_page(self, canvas, doc): 
    # ... do any additional page formatting here for each page 
    print doc.page 
+0

Tak, ale trudną częścią jest jak odgadnąć część "z y" :) Oznacza to, że całkowita liczba stron – Joril

4

użycie doc.multiBuild

oraz w metodzie nagłówek strony (zdefiniowany przez "onLaterPages ="):

global TOTALPAGES 
if doc.page > TOTALPAGES: 
    TOTALPAGES = doc.page 
else: 
    canvas.drawString(270 * mm, 5 * mm, "Seite %d/%d" % (doc.page,TOTALPAGES)) 
+0

działa to tylko w przypadku wielu przejść – jake77

Powiązane problemy