A follow on from this question i posted yesterday
I am able to loop through all of my records, and it gets written to a variable called data which is then appended to another variable called parts, and When I put a watch on the parts variable I can see the correct data, but when it tries to build the pdf ...
doc.build(parts)
I get the following error
AttributeError: 'list' object has no attribute 'getKeepWithNext'
Here's the full code
import os, arcgisscripting, datetime, string
from reportlab.lib.pagesizes import A4
from reportlab.platypus import *
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
myWorkspace = r"W:\HeartOfTheCity.gdb"
myReportFolder = r"W:\Reports"
OpenPDF = "true"
gp = arcgisscripting.create(9.3)
#setup geoprocessor
gp.workspace = myWorkspace
gp.toolbox = "analysis"
gp.OverwriteOutput = 1
mySelectedGroupsFC = myWorkspace + os.sep + "SelectedGroups"
myNewBusinessFC = myWorkspace + os.sep + "New_Businesses"
myBufferFC = myWorkspace + os.sep + "Buffer"
myReportTable = myWorkspace + os.sep + "FINAL_TABLE"
#obtain Selected groups
mySelGroupsCursor = gp.searchcursor(mySelectedGroupsFC)
mySelectedGroups = mySelGroupsCursor.next()
#obtain New Business groups
myNewBusinessCursor = gp.searchcursor(myNewBusinessFC)
myNewBusiness = myNewBusinessCursor.next()
#obtain Buffer
myBufferCursor = gp.searchcursor(myBufferFC)
myBuffer = myBufferCursor.next()
#setup PDF doc
pdf_file_name = myNewBusiness.Postcode
pdf_file = myReportFolder + os.sep + pdf_file_name + ".pdf"
doc = SimpleDocTemplate(pdf_file, pagesize=A4)
#array of report elements
parts = []
#
#HEADER
#
parstyle = ParagraphStyle(name='Title', fontName='Helvetica', fontSize=12, alignment=1, spaceAfter=20)
p = Paragraph('<b><u>Heart of the City Search Report</u></b>', parstyle)
parts.append(p)
p = Paragraph('The following community groups are located within <b><u>' + myBuffer.Buffer + ' metres of - <b><u>' + myNewBusiness.Postcode + '<\b><\u>.',parstyle)
parts.append(p)
#Enter while loop for each buffer feature
#while myBuffer:
while myBuffer:
print myBuffer.Buffer
parstyle = ParagraphStyle(name='Title', fontName='Helvetica', fontSize=11, alignment=0, spaceAfter=15, spaceBefore =15)
p = Paragraph('<b><u>Community groups within ' + myBuffer.Buffer + ' metres of ' + myNewBusiness.Postcode + '</u><\b><br>', parstyle)
parts.append(p)
data = []
parstyle = ParagraphStyle(name='Title', fontName='Helvetica', fontSize=11, alignment=0)
while mySelectedGroups:
selectedGroups_desc = 'Community ID:'+ '<i>' + mySelectedGroups.Community_ID + '<\i>'+ 'Organisation Name :' + mySelectedGroups.Organisation_Name + '<br>'
p = Paragraph(selectedGroups_desc, parstyle)
data.append(p)
#print data
mySelectedGroups = mySelGroupsCursor.next()
parts.append(data)
print parts
#print parts
myBuffer = myBufferCursor.next()
#
#FOOTER
#
parstyle = ParagraphStyle(name='Title', fontName='Helvetica', fontSize=11, alignment=0, spaceAfter=15, spaceBefore=15)
p = Paragraph('''Should you have any further questions **''', parstyle)
parts.append(p)
doc.build(parts)
del mySelGroupsCursor, myNewBusinessCursor, myBufferCursor
#Open document
if OpenPDF == "true":
os.startfile(pdf_file)
Any ideas?
It's been a while since I've used ReportLab so I may be way off in this. However, I think all of the items in parts need to be of the Flowable class. Here, you're appending a list to parts:
data = []
parstyle = ParagraphStyle(name='Title', fontName='Helvetica', fontSize=11, alignment=0)
while mySelectedGroups:
selectedGroups_desc = 'Community ID:'+ '<i>' + mySelectedGroups.Community_ID + '<\i>'+ 'Organisation Name :' + mySelectedGroups.Organisation_Name + '<br>'
p = Paragraph(selectedGroups_desc, parstyle)
data.append(p)
#print data
mySelectedGroups = mySelGroupsCursor.next()
parts.append(data)
I don't think this is valid. Everything in parts is supposed to be a Flowable. Perhaps you're trying to make a list, in which case you'd need a ListFlowable.
Here is the example from the docs http://www.reportlab.com/docs/reportlab-userguide.pdf section 9.10:
from reportlab.platypus import ListFlowable, ListItem
from reportlab.lib.styles import getSampleStyleSheet
styles = getSampleStyleSheet()
style = styles["Normal"]
t = ListFlowable(
[
Paragraph("Item no.1", style),
ListItem(Paragraph("Item no. 2", style),bulletColor="green",value=7),
ListFlowable(
[
Paragraph("sublist item 1", style),
ListItem(Paragraph('sublist item 2', style),bulletColor='red',value='square')
],
bulletType='bullet',
start='square',
),
Paragraph("Item no.4", style),
],
bulletType='i'
)