What I’m trying to do: Export my form to PDF
When I try to export my form to PDF, I get an error in my output: “AnvilWrappedError: Invalid print session”. I have tried several things with no luck. What am I doing wrong? Newish programmer. Frist day with Anvil.
What I’ve tried and what’s not working: I have looked at
-
Several blog posts on write_to_file, using different parameters in the render_form()
Code Sample:
# Client
from ._anvil_designer import QueryTemplate
from anvil import *
import anvil.server
import anvil.media
class Query(QueryTemplate):
def __init__(self, **properties):
# Set Form properties and Data Bindings.
self.init_components(**properties)
# Any code you write here will run when the form opens.
def submit_click(self, **event_args):
"""This method is called when the button is clicked"""
result = anvil.server.call('get_meter_info', self.meter_id.text)
print(result[:-1])
self.result.text = result[-1]
def export_click(self, **event_args):
"""This method is called when the button is clicked"""
media_object = anvil.server.call('export_to_pdf', self.meter_id.text, self.result.text)
anvil.media.download(media_object)
#########
# Server via Uplink
from arcgis import GIS
from arcgis.features import FeatureLayer
import anvil.server
import anvil.pdf
from arcgis.raster.functions import med
from anvil.pdf import PdfRenderer
anvil.server.connect("REMOVED AFTER PASTE")
#TODO: May want to check if user is already logged in
gis = GIS(profile='REMOVED AFTER PASTE')
print(gis.users.me.username)
def get_meter_by_id(miu_id, lyr):
keep_fields = ['Meter_Serial', 'Status', 'Meter_Installation', 'Meter_Type', 'Meter_Size', 'Manufacturer', 'Asset_ID',
'Billing_Account_Num', 'Consumption', 'Meter_Cycle', 'Meter_Route', 'Walk', 'Fund_ID', 'Meter_Number', 'Account_Name',
'Account_Number', 'Address', 'MIU_ID', 'Meter_Number1', 'Meter_Size1', 'Reading', 'Last_Reading', 'Meter_Read',
'Days_Since_Last_Read', 'Meter_Status', 'Route_Cycle', 'c2_times_Avg_Consumption', 'Days_of_Above_Avg_Cons',
'Occupancy_Status', 'Maintenance_Requested', 'Included_in_Analysis']
#lat_long_sr = 4326
#state_plane_sr = 3857
wgs_84_sr = 3857
return lyr.query(where=f"MIU_ID = {miu_id}", out_fields=keep_fields, out_sr=wgs_84_sr)
@anvil.server.callable
def export_to_pdf(meter_id, result):
media_obj = anvil.pdf.render_form('Query', meter_id, result)
return media_obj
@anvil.server.callable
def get_meter_info(meter_id):
agol_item = gis.content.get('df1e1e2ce742480288318f22e4be721b')
feat_lyr = FeatureLayer.fromitem(agol_item)
result = get_meter_by_id(meter_id, feat_lyr)
return ('logged in', meter_id, feat_lyr.properties.name, result.to_dict()['features'])
Clone link:
share a copy of your app