Data Driven Pages are powerful, but do not always allow the degree of customization needed for a map automation project. Here is an example of python code we use to automatically generate scores of customized maps within minutes into separate PDF with unique names based on the map layer attributes you select:
import arcpy
import arcpy.mapping
import os
import sys
arcpy.env.workspace = "M:\Maps\Unified"
from arcpy import mapping as MAP
mxd = MAP.MapDocument("M:/Maps/Unified/Unified.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
lyr = arcpy.mapping.ListLayers(mxd, "unified", df)[0]
arcpy.AddMessage(lyr.name)
path = arcpy.env.workspace
print "Program Path: "+path
print "Map Title: "+mxd.title
print "Layer Name: "+lyr.name
#print df.description
fc = "M:\Data\unified\unified.shp"
# rows = arcpy.SearchCursor(fc,("NAME",))
i = 0
while i < 98:
criteria = "FID = "+str(i)
rows = arcpy.SearchCursor(fc,criteria)
row = rows.next()
#entityname = row[0]
entityname = row.getValue("NAME")
print entityname
df.description = entityname
mxd.title = entityname
#entityname = str(i)
filename = path+"\Unified_"+entityname+".pdf"
arcpy.AddMessage(criteria)
arcpy.SelectLayerByAttribute_management(lyr,"NEW_SELECTION",criteria)
df.extent = lyr.getSelectedExtent()
arcpy.RefreshActiveView()
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
arcpy.mapping.ExportToPDF(mxd,filename)
i += 1
del mxd
Although the code will run if you have the Unified.mxd ArcGIS map project open, it will run much faster if it is closed while you run the script. If you want to optimize this code even further, you could have python count the number of rows for your loop rather than hard coding 98 as the number of rows. We don't run this code often, but it works great in creating uniform maps with all our desired features.