2/18/2017 - updated download links
This widget is an enhancement of the Esri Print Widget, which was originally written by David Spriggs.
Bug Fixes and Enhancements in Version 1.1.6
Bug Fixes and Enhancements in Version 1.1.5
Bug Fixes in Version 1.1.4
Bug Fixes in Version 1.1.3
Bug Fixes in Version 1.1.2
Enhancements and Changes in Version 1.1.1
Features:
Downloads:
PrintPlus-1.1.6-2015-7-12.zip
CompanionLayoutsWithNoTitleBlocks.zip
PrintPlus-1.1.6-2015-7-12 (download - widget by Larry Stout)
This works great Larry! While I was playing around with your print widget I also noticed the default layer widget. Is this something available by default or could you share the code with me? Much simpler for users than hitting the "reset" button.
Thanks,
Brandon
Brandon,
I have a headless widget I call Acme. It does lots of "behind the scenes" things, and one of them is resetting the layers to the default WebMap. All the ResetLayers Widget does is publish a topic that the Acme Widget has subscribed to.
One of my next projects is to fully document the Acme Widget and make config examples for each widget that depends on it, just for requests like this.
Here's a link where you can download my entire app and some documentation on the Acme Widget configuration. It's a few weeks old, and I'm in the process of updating the post, but as far as the ResetLayers Widget, it should be reasonably up to date. Just get the two files under "Web AppBuilder Application".
Sorry to sound like a moron but how do you install this widget to WAB 1.1?
Luke,
If you right click on the "PrintPlus-1.1.2-2015-4-11.zip" link and choose "Save Link As..." and then unzip the contents and copy the PrintPlus folder over to your \client\stemapp\widgets folder then when you create a new app the Print Plus widget will be available in the widget list.
If you are experienced in editing json files then you can add it to an existing app by following these steps:
{
"name": "PrintPlus",
"label": "Print Plus",
"version": "1.1.2",
"uri": "widgets/PrintPlus/Widget",
"config": "configs/PrintPlus/config_Print Plus.json",
"index": 5,
"id": "widgets/PrintPlus/Widget_19"
}
Note: the index and the number at the end of the id both need to be a unique number that is not already used in the other widgets.
Robert has given you better instructions than I would have. If you have any questions about the specific configuration, just let me know. The Print Plus Widget is not yet configurable in WAB, so the best way to configure it now in either case is with a text editor.
This is an excellent widget. I would like to add a logo to the layout, etc. Is this possible? I didn't see anything in the configuration documents. Also, on your online example there is a north arrow, while the one I installed doesn't have a north arrow.
Rudie,
Thanks for the kind words. I believe I must have added the north arrow to the templates on my ArcGIS Server. I think that would also be the best way to add a logo to the layout.
Larry
How does the application interact with templates on ArcGIS Server? Also, where in ARcServer do you put these templates?
Rudie,
Make sure you are pointing the WAB app to your server and not AGOL. In my widget and also in the Esri Print widget, the serring is the first property in the config.json:
"serviceURL": "//<your server>/PrintingTools/GPServer/Export Web Map Task",
On my server, the templates are at E:\WebMapTemplates. The drive letter may be different on your server.
I suggest you back up the default templates before you start modifying them. -:)
How do you connect the templates onto the server? Its not similar to publishing a service is it?
I understand this portion "serviceURL": "//<your server>/PrintingTools/GPServer/Export Web Map Task",
How do the templates link to the service or widget? I didn't see it in the config.json
Is there parameters for the templates?
Sorry about the confusion
Thanks,
Brian
Brian,
In the PrintPlus config file, the "serviceURL" property points to the Export Web Map Task on your ArcGIS Server.
The Export Web Map Task knows where the templates are.
The widget gets the templates from the Export Web Map Task.
It's complicated, but makes sense once you figure it out.
Larry
Hi Brian,
I've struggled with this all myself so don't feel bad. I don't believe the default Export Web Map Task knows anything about layout templates so you will need to publish your own geoprocessing service. That will allow you to specify the template folder location as a variable in your script.
import arcpy
import os
import uuid
# The template location in the registered folder (as UNC path)
templatePath = '//MyComputerName/MyDataStore/USA'
This tutorial was really helped me when I was publishing print templates. ArcGIS Help 10.1
Best,
Brandon
Now I'm confused. My default Export Web Map Task knows about the layout templates and the formats supported:
Where do you have the templates saved?
E:\WebMapTemplates. Your drive letter may vary. The default templates should already be there. You can search for "Letter ANSI A Landscape.mxd".
Hi Larry,
I find that mxd here \\recpgis01\E$\Program Files\ArcGIS\Server\Templates\ExportWebMapTemplates. And I can understand that it will work by default if you name the files the same as they are within this folder but it won't see any other files unless you edit the script parameters to have the additional mxd names. And I don't know how to do that without publishing my own geoprocessing service.
Brandon
I'm a little fuzzy on this because I did it a long, long time ago. I have layout templates in C:\Program Files\ArcGIS\Server\Templates\ExportWebMapTemplates. That is the default. I copied a new template into this folder and restarted the Printing Tools service, and now it shows up in the Rest Services directory. It is called "No TB Letter ANSI A Landscape" and you can see it here: Task: Export Web Map Task
Larry,
This is a great widget. I have found that in dev 1.1 when I try to customize the visible scale ranges, it breaks the print widget. For example when I remove some of the small scales the config file writes in some map options. When I use the print tool it always zooms me out to the smallest scale I have available and runs the print and then zooms me back in. I then need to change back the map options back to "mapOptions": {}, to get it to work again. Hope this makes sense.
-Stan
Stan,
I am sort of able to follow what you are saying, but a link I can look at would be helpful.
Larry
Larry awesome widget!
I noticed that when your widget is added to the Web Appbuilder the printing work great, but i have download the app and placed to my iis to do a test run and i noticed that the when i try to print i get the "Error, try again". I haven't changed the serviceURL in the config.json. So my question is why does it work with the app builder but not once you download the app to deploy? I do not have ArcGIS Sever.
Luke,
Thanks for the kind words. If you can post a link to your app on the server, I'll take a look at it.
Larry
I currently don't have in on a server. the app is just on my PC iis.
Can you post any console errors you are getting when you run it from IIS?
Larry,
Here is a demo site. All I did was add the widget change the config and removed some of the available zoom levels.
Also you will notice in the print out there are labels in the legend called override 1 and 2.
-Stan
Stan,
Now I understand the problem. This widget is over a year old. Initially, I tested it with Geographic Coordinates as well as Web Mercator, but not lately. We use State Plane. It looks like I need to do some more testing with Geographic.
I've noticed the override 1 and override 2 as well, but it hasn't been very high on my to do list. I'll look into that also.
It may be a few days, but I'll get these problems fixed and get back to you.
Larry
x | @ | init.js:192 |
(anonymous function) | @ | init.js:191 |
c | @ | init.js:76 |
d | @ | init.js:76 |
b.Deferred.resolve.callback | @ | init.js:77 |
c | @ | init.js:76 |
d | @ | init.js:76 |
b.Deferred.resolve.callback | @ | init.js:77 |
c | @ | init.js:76 |
d | @ | init.js:76 |
b.Deferred.resolve.callback | @ | init.js:77 |
c | @ | init.js:76 |
d | @ | init.js:76 |
b.Deferred.resolve.callback | @ | init.js:77 |
(anonymous function) | @ | init.js:195 |
k | @ | init.js:199 |
m | @ | init.js:199 |
f.resolve | @ | init.js:201 |
a | @ | init.js:200 |
k | @ | init.js:200 |
m | @ | init.js:199 |
f.resolve | @ | init.js:201 |
a | @ | init.js:200 |
k | @ | init.js:200 |
m | @ | init.js:199 |
f.resolve | @ | init.js:201 |
a | @ | init.js:200 |
k | @ | init.js:200 |
m | @ | init.js:199 |
f.resolve | @ | init.js:201 |
q | @ | init.js:160 |
f | @ | init.js:164 |
PrintPlus.js:1348 Error: Unable to complete operation. {code: 400, message: "Unable to complete operation.", details: Array[1], log: undefined, httpCode: 400…}_ssl: undefinedcode: 400details: Array[1]httpCode: 400log: undefinedmessage: "Unable to complete operation."stack: (...)get stack: function () { [native code] }set stack: function () { [native code] }__proto__: d
Luke,
I'm seeing an error that I've seen before, but I'm not sure what is causing it. I'll work on it.
Are you using geographic coordinates in your WebMap?
Larry
Stan,
I did find a couple of bugs in the Print Plus Widget when using a geographic spatial reference. I've fixed them and posted Version 1.1.3. Let me know if this fixes the bug you found (or if it doesn't).
Larry
I am using Projected Coordinates.
Thanks for the follow up.
I posted a new version of the Print Plus Widget (1.1.3) yesterday. I'm not sure if I fixed anything that will help you because I'm still trying to get a handle on your problem, but you might try the new version.
Also, make sure the serviceURL in the config file is pointed to Esri's server:
Also, you should be able to copy the serviceURL into your browser and see the Export Web Map Task in the Rest Services Directory.
Larry
If I leave the zoom levels alone then when I go to print then it zooms in to a scale for the print job and then all I get is a gray map and nothing is responsive. If I adjust the available zoom levels or even rest them then it zooms out to the smallest visible scale and sends the print job. Same as before.
Also as a side note. If the print plus widget is added to the header controller then the checkbox for show layout gets bumped to the next line.
-Stan
Interesting, it works fine today, i didn't change anything I just verified that i had ServiceURL...
Stan,
I've been able to reproduce the problem with my WebMap after I removed the two smallest scales. Now I can fix it. Sorry for the false alarms.
On a different topic, I noticed a couple of console errors on your test app. The nls files for the Mixin Classes in the PrintPlus Widget seem to be missing.
Larry
Larry,
Thanks. I took a look at the errors and noticed that they were referencing files that should have been there. I did some investigating and found that for some reason capital letters mattered in the url. The fix is in the PrintPlus/Widget.js file lines 34 and 35 need to have a capital W for _WidgetOpacityMixin and _WidgetMetadataMixin.
-Stan
Also I am not able to get the instructional text to show up at the bottom of the red layout box. Am I missing something?
Stan,
Good catch. I hate sloppy programming. I've fixed them all in my code, but I'm curious about what OS & browser you are seeing this in. I've never seen the problem.
Larry
The instruction text is in the PrintPlus/nls/strings.js file. Can you confirm that is working for you?
No problem. I am not really sure how this happens. I have this test site on a Go Daddy hosting account of mine and all I know is that is is on a Linux OS. I was using Chrome to see this. If you know of a way to fix this then that would be very helpful
-Stan
If you are asking if the site has access to the strings.js file, then yes.
Stan,
Try this version. If it addresses your issues, then I'll post the update.
I really do appreciate your help in testing this. No way I could test all of the spatial reference and configuration options.
Larry
Great! the instructional text now shows up. Now for the life of me I can not seem to get it to print. When I hit the print button it starts to act normal and then after the zoom to extent the map goes gray and freezes the map. It then requires a refresh and no print job. I even tried to set it up on a fresh version of WAB 1.1, I was getting this same gray screen with the PrintPlus 1.3 and 1.4 Do you see anything that I am missing? I updated that test site so you can see what I am seeing.
-Stan
Stan,
I think it should work for you now. I also cleaned up the checkbox problem when putting the widget in the widget pool, and made a few other cosmetic changes. Here is the entire widget for you to test.
Larry
This is looking great. The zooming out for the print is fixed and the instructional text.
Thanks,
-Stan
I did notice that a few more things.
1. This widget does not print any graphics that are drawn on the map with the draw tool.
2. If a layer is not turned on when a print job is submitted then you get a gray map until a layer is turned on and then it sent it to the print queue. In this case a user can not just print just the basemap.
-Stan
3. Closing the print widget does not remove the red layout box from the screen. You need to click the X in the top right of the red layout. Then if you want to print again, you need to check the box in the widget to show layout.
I am not sure if you are working on a settings file to make the builder experience better but I worked this up for you to add into this widget. It is at least a start. It just tells the user to configure the widget in the config.json file and not in the builder. That way it gets rid of the spinning gif.
-Stan
Stan,
The settings file is on my to do list, but pretty far down. Your fix is wonderful. I'll use it on all my widgets that don't have settings files until I get to them.
Thanks,
Larry
Stan McShinsky wrote:
I did notice that a few more things.
1. This widget does not print any graphics that are drawn on the map with the draw tool.
2. If a layer is not turned on when a print job is submitted then you get a gray map until a layer is turned on and then it sent it to the print queue. In this case a user can not just print just the basemap.
-Stan
1. I have fooled around with this and here is what I have run into. I removed all graphics layers from the printDef, and that took care of the overrides in the legend. I tried leaving the graphics layer from the Draw Widget in the printDef, but I wasn't able to change the label from "override". The legend for the Draw Widget graphics wasn't very useful, so I tried leaving this layer off the legend but still include it in the map. Still no luck. I'll revisit this from time to time. Sometimes the stars have to align for me to figure out the tricky stuff.
2. I fixed this. The problem was asynchronous in nature. I was listening for the map's 'update-end' event. There is no map update if only a cached basemap is turned on. Tricky, but It should work now.
I don't seem to be able to download your zip file.
Glenn,
Right click the link and choose 'save target as'.