Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 15422)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 15423)
@@ -3640,6 +3640,54 @@
         students_utils = getUtility(IStudentsUtils)
         return students_utils.renderPDFCourseticketsOverview(
-            self, session, self.data(session), lecturers, 'landscape', 90,
-            self.note)
+            self, 'coursetickets', session, self.data(session), lecturers,
+            'landscape', 90, self.note)
+
+class ExportAttendanceSlip(UtilityView, grok.View,
+    LocalRoleAssignmentUtilityView):
+    """Deliver a PDF slip of course tickets in attendance sheet format.
+    """
+    grok.context(ICourse)
+    grok.name('attendance.pdf')
+    grok.require('waeup.showStudents')
+
+    @property
+    def note(self):
+        return
+
+    def data(self, session):
+        cat = queryUtility(ICatalog, name='coursetickets_catalog')
+        # Attention: Also tickets of previous studycourses are found
+        coursetickets = cat.searchResults(
+            session=(session, session),
+            code=(self.context.code, self.context.code)
+            )
+        header = [[_('Student Id'),
+                   _('Matric No.'),
+                   _('Level'),
+                   _('Course of Studies'),
+                   _('Booklet No.'),
+                   _('Signature'),
+                   ],]
+        tickets = []
+        for ticket in list(coursetickets):
+            row = [ticket.student.student_id,
+                  ticket.student.matric_number,
+                  ticket.level,
+                  ticket.student.certcode,
+                  None,
+                  50 * ' ',
+                  ]
+            tickets.append(row)
+        return header + sorted(tickets, key=lambda value: value[0]), None
+
+    def render(self):
+        session = grok.getSite()['configuration'].current_academic_session
+        lecturers = [i['user_title'] for i in self.getUsersWithLocalRoles()
+                     if i['local_role'] == 'waeup.local.Lecturer']
+        lecturers =  ', '.join(lecturers)
+        students_utils = getUtility(IStudentsUtils)
+        return students_utils.renderPDFCourseticketsOverview(
+            self, 'attendance', session, self.data(session),
+            lecturers, 'landscape', 90, self.note)
 
 class ExportJobContainerOverview(KofaPage):
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 15422)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 15423)
@@ -157,5 +157,5 @@
 
     def renderPDFCourseticketsOverview(
-                  view, session, data, lecturers, orientation,
+                  view, name, session, data, lecturers, orientation,
                   title_length, note):
         """Render pdf slip of course tickets for a lecturer.
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 15422)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 15423)
@@ -4517,4 +4517,19 @@
         print "Sample PDF coursetickets.pdf written to %s" % path
 
+    def test_lecturers_can_download_attendance_sheet(self):
+        # A course ticket slip can be downloaded
+        self.course.title = (u'Lorem ipsum     dolor sit amet, consectetur     adipisici, '
+                             u'sed         eiusmod tempor    incidunt ut  labore et dolore')
+        self.login_as_lecturer()
+        pdf_url = '%s/attendance.pdf' % self.course_url
+        self.browser.open(pdf_url)
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(
+            self.browser.headers['Content-Type'], 'application/pdf')
+        path = os.path.join(samples_dir(), 'attendance.pdf')
+        open(path, 'wb').write(self.browser.contents)
+        print "Sample PDF attendance.pdf written to %s" % path
+
+
     def test_lecturers_can_download_scores_as_csv(self):
         # Lecturers can download course scores as CSV.
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 15422)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 15423)
@@ -1008,10 +1008,10 @@
 
     def renderPDFCourseticketsOverview(
-            self, view, session, data, lecturers, orientation,
+            self, view, name, session, data, lecturers, orientation,
             title_length, note):
         """Render pdf slip of course tickets for a lecturer.
         """
-        filename = 'coursetickets_%s_%s_%s.pdf' % (
-            view.context.code, session, view.request.principal.id)
+        filename = '%s_%s_%s_%s.pdf' % (
+            name, view.context.code, session, view.request.principal.id)
         session = academic_sessions_vocab.getTerm(session).title
         creator = getUtility(IPDFCreator, name=orientation)
@@ -1055,4 +1055,8 @@
                        'b':view.context.code,
                        'd':session}))
+        if name == 'attendance':
+            doc_title += _('\nAttendance Sheet')
+        if name == 'coursetickets':
+            doc_title += _('\nCourse Tickets Overview')
         footer_title = translate(_('${a} (${b}) - ${d}',
             mapping = {'a':ft,
