سؤال

أحاول إضافة "صفحة x من y" بسيطة إلى تقرير تم إعداده باستخدام ReportLab.وجدت هذا المنصب القديم حول هذا الموضوع، ولكن ربما بعد ست سنوات ظهر شيء أكثر وضوحًا؟^^;
وجدت هذه الوصفة أيضًا، ولكن عندما أستخدمه، فإن ملف PDF الناتج يفتقد الصور.

هل كانت مفيدة؟

المحلول

لقد تمكنت من تنفيذ نهج NumberedCanvas من ActiveState.لقد كان من السهل جدًا القيام بذلك ولم يغير الكثير من الكود الحالي الخاص بي.كل ما كان علي فعله هو إضافة فئة NumberedCanvas وإضافة سمة Canvasmaker عند إنشاء مستندي.لقد قمت أيضًا بتغيير قياسات مكان عرض "x of y":

self.doc.build(pdf)

أصبح

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

وثيقة هو BaseDocTemplate و بي دي إف هي قائمتي من العناصر القابلة للتدفق.

نصائح أخرى

واستخدام doc.multiBuild

ووفي طريقة رأس الصفحة (يحددها "onLaterPages ="):

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

مجرد البحث عن بعض التعليمات البرمجية لك، نستخدم هذا:

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

الآن self._on_page هي طريقة يتم استدعاؤها لكل صفحة مثل:

def _on_page(self, canvas, doc):
    # ... do any additional page formatting here for each page
    print doc.page
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top