2009-03-12 42 views
13

Estoy tratando de agregar una simple "página x de y" a un informe hecho con ReportLab ... He encontrado this old post al respecto, pero tal vez seis años después ha surgido algo más sencillo? ^^;
He encontrado this recipe también, pero cuando lo uso, el PDF resultante falta las imágenes ..Mostrando página cuenta con ReportLab

+1

Tenía este mismo problema. Aquí está la receta de ActiveState que utiliza NumberedCanvas que realmente funciona: http://code.activestate.com/recipes/576832/ – Esteban

Respuesta

11

que fue capaz de poner en práctica el enfoque NumberedCanvas de ActiveState. Fue muy fácil de hacer y no cambió gran parte de mi código existente. Todo lo que tuve que hacer fue agregar esa clase NumberedCanvas y agregar el atributo canvasmaker al compilar mi documento. También ha cambiado las mediciones de donde se visualiza la "x de y":

self.doc.build(pdf) 

convirtió

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

doc es un BaseDocTemplate y pdf es mi lista de elementos que pueden fluir.

+0

¿Aparecieron las imágenes normalmente con ese enfoque? – Joril

+0

Tengo imágenes que se muestran en el pdf sin ningún problema. Si tiene un problema con las imágenes, ¿podría elaborar o comenzar una nueva pregunta? – adam

+0

Parece que esta técnica rompe enlaces dentro del documento. Cuando lo usé, todos los enlaces de una parte del documento a otra parte comenzaron a navegar hasta la mitad de la primera página, en lugar de ir a sus objetivos reales. – CoreDumpError

1

Sólo desenterrar algo de código para usted, utilizamos la siguiente:

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

Ahora self._on_page es un método que es llamada para cada página como:

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

Sí, pero la parte difícil es cómo descubrir la parte "de y" :) Es decir, la número total de páginas – Joril

4

uso doc.multiBuild

y en el método de cabecera de la página (definido por "onLaterPages ="):

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

esto funciona solo si tienes múltiples pases – jake77

Cuestiones relacionadas