Is there a way to specify an alternate symbology for print output in ArcMap (as opposed to what is currently on-screen? I am thinking along the lines of the functionality offered by CSS.

For instance, the on-screen representation of a line might be dashed, but in print it might need to be a double line with a thicker width.

The core issue is that we have users needing to view production layers with overlaid development layers on screen - so a non-standard symbology is helpful here. When design is complete, only the final design layers are printed, but should be represented with the "production" symbology.

Currently using Arc 10.0, but open to solutions requiring other versions and/or scripting.

  • 1
    I would probably either maintain two separate mxd files with the appropriate symbology set in each (or possibly two dataframes in the same mxd), or save out the two symbologies to layer (.lyr) files and apply them as needed/appropriate. It somewhat depends on how much back and forth there is, how hard it is to do that extra maintaining, and how easy it would be for something to screw up (inadvertent edits, layers frequently change out, etc). As far as I know there isn't a way to maintain a dual symbology - an often requested feature is scale dependent symbology which isn't currently possible.
    – Chris W
    Mar 27, 2015 at 18:19

2 Answers 2


Both Chris W's comment and mr.adam's answer employed pairs of mxd's or multiple data frames to hold pairs of symbology. This got me to thinking about a similar approach.

Multiple layer groups could be used to hold multiple symbologies (eg a "design" group and a "print" group). The user could enable the "design" group while doing design work. When the design work was finished, simply disable the "design" group and enable the "print" group.

If used in the same data frame, this approach has the added bonus of leaving the extent intact.

  • 1
    Yeah, this is a good idea. Things only might get a little messy if there are a lot of layers, or if you ever did a ListLayers() operation on the dataframe because you are likely to have layers with identical names. Your mention of the extent reminded me that if you instead went with the separate data frame (one that has the print symbology and is always set up in on the canvas in layout view), you could just set that data frame's extent to equal that of the dataview/business layers data frame.
    – mr.adam
    Apr 6, 2015 at 14:11
  • +1 for mr.adam's suggestion of linking the data frames. See also gis.stackexchange.com/a/50521/48394
    – Andy
    Apr 6, 2015 at 14:54

You could set up an .mxd that has all of the print symbology and scale bar, etc. You would never open this document, but you'd build a tool/script that would be run from the viewer mxd. That tool could look at that current viewer, take the extent and data sources and feed them into the template mxd (then save it!) and export that mxd to a pdf. Basically, you'd be replacing File > Export map... with a custom tool in a toolbox.

Actually implementing this would vary a lot based on how consistent your layers are (are you viewing the same datasets all the time?) and how variable your outmap maps are (does the scale change significantly from map to map? Do you have a standard printed map page size?). But it's a starting idea...

More simply, you could just build a script that does a few Apply Symbology From Layer operations (using the preset production symbology) on layers in the viewer mxd and go from there. For example, create a new data frame called "production" in the viewer mxd, leave it setup in layout and have the script remove/add/symbolize layers in that data frame and then (save!) export.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.