Crear un libro de mapas con páginas enfrentadas
ArcGIS proporciona todas las herramientas necesarias para crear libros de mapas en formato impreso o Adobe PDF. Un libro de mapas es un conjunto de páginas impresas o exportadas juntas. Muchas de las páginas contienen mapas, pero otras pueden estar dedicadas a texto, tablas, índices o páginas de título y otros contenidos.
Las páginas opuestas permiten que el autor del mapa tenga en cuenta el margen interno del libro. El margen interno es el espacio necesario para encuadernar las páginas del libro. A menudo, se trata de un libro de mapas que contiene una serie de referencia que cubre una sucesión de extensiones de mapa, al igual que hace un libro de mapas de referencia. No obstante, a diferencia de una serie de referencia, este libro de mapas utiliza los diseños de dos documentos de mapa: uno para la página izquierda y otro para la derecha. Las extensiones de las series se definen usando Páginas controladas por datos. Cree el mismo conjunto de Páginas controladas por datos en cada documento de mapa. La secuencia de comandos de Python arcpy.mapping utiliza ambos documentos de mapa y ensambla las páginas izquierdas y derechas del documento PDF final en el orden apropiado.
En el ejemplo anterior se muestra un libro de mapas topográfico para el condado Arenac en Michigan (EE. UU.) con páginas opuestas. Observe que las páginas del mapa con número impar (como la 3) tienen un diseño de alineación en el que todos los elementos de las páginas se desplazan a la izquierda. Las páginas del mapa con números pares (por ejemplo, 4) se alinean a la derecha. Esto se hace para dejar espacio para la encuadernación del libro. Asimismo, los números de página y el mapa localizador se han colocado en cada diseño de mapa de forma que queden fuera de la página. Cada alineación de página (izquierda y derecha) se basa en un documento de ArcMap distinto. Puede crear este documento mediante Páginas controladas por datos y una secuencia de comandos de Python arcpy.mapping.
Para obtener más información, vea Crear páginas controladas por datos.
En este ejemplo se asume lo siguiente:
- Tiene dos documentos de mapa existentes con la opción de Páginas controladas por datos habilitada, donde un documento está configurado para páginas izquierdas y el otro documento está configurado para las páginas derechas.
En este ejemplo de código se trabaja con el ejemplo de libro de mapas de serie de referencia simple que se muestra en Generar libros de mapas con ArcGIS.
Puede recrear este libro de mapas siguiendo los pasos descritos en estos temas de Ayuda:Iniciar el libro de mapasCrear entidades de índice de cuadrículaModificar la capa de entidades de índice de cuadrículaHabilitar páginas controladas por datosCrear un mapa localizador para un libro de mapasAgregar texto dinámico para un libro de mapasExportar un libro de mapasUna vez que haya creado un mapa con páginas controladas por datos, necesita crear una copia del documento de mapa. Al tener dos copias, puede reorientar los elementos de mapa para cada documento de modo que un diseño se oriente a la izquierda y el otro diseño se oriente a la derecha. Asegúrese de nombrar los documentos de mapa de modo que pueda distinguir cuál es para el lado izquierdo y cuál es para el lado derecho del libro de mapas final.Dado que el libro de mapas visualiza los números de página, debe asegurarse de que el número de página inicial para las páginas controladas por datos incluya todas las páginas del libro de mapas final que la precede. En este ejemplo, hay dos páginas que preceden las páginas de mapa. Por consiguiente, las páginas de mapa empiezan en la página 3. Asegúrese de que sea 3 el valor para Número de página de inicio en el cuadro de diálogo Configura las páginas controladas por datos.
- Tiene un archivo PDF existente para la página de título del libro de mapas.
- Tiene un archivo PDF existente que contiene la página de mapa de vista general.
Puede crear las páginas de título y de mapa de vista general utilizando ArcMap. Solo tiene que crear el contenido para cada página y exportar cada una de ellas a un PDF separado.
Una vez que tenga un documento de mapa y archivos PDF listos, puede ejecutar el código siguiente para crear el PDF final del libro de mapas. Puede ejecutar el código en la Ventana de Python o en una aplicación Python independiente.
Aunque el código concreto de este tema se aplica al libro de mapas del ejemplo anterior, también puede aplicar los procedimientos y las sugerencias que aquí se presentan a sus propios libros de mapas.
Crear un PDF de libro de mapas con páginas enfrentadas.
import arcpy, os
# Create an output directory variable
#
outDir = r"C:\temp\MBExample\final_output"
# Create a new, empty pdf document in the specified output directory
#
finalpdf_filename = outDir + r"\FinalMB.pdf"
if os.path.exists(finalpdf_filename):
os.remove(finalpdf_filename)
finalPdf = arcpy.mapping.PDFDocumentCreate(finalpdf_filename)
# Add the title page to the pdf
#
finalPdf.appendPages(r"C:\temp\MBExample\ancillary_pages\TitlePage.pdf")
# Add the index map to the pdf
#
finalPdf.appendPages(r"C:\temp\MBExample\maps\IndexMap.pdf")
# Create Facing Pages for the map book
# Create pages for left-hand side of the book
#
mxdPathLeft = r"C:\temp\MBExample\maps\Arenac County MB Left.mxd"
tempMapLeft = arcpy.mapping.MapDocument(mxdPathLeft)
tempDDPLeft = tempMapLeft.dataDrivenPages
# Loop creates individual pdf's for odd numbered pages
#
for pgNumLeft in range(1, tempDDPLeft.pageCount + 1, 2):
temp_filename = r"C:\temp\MBExample\temp_pdfs\MB_" + \
str(pgNumLeft) + ".pdf"
if os.path.exists(temp_filename):
os.remove(temp_filename)
tempDDPLeft.exportToPDF(temp_filename, "RANGE", pgNumLeft)
# Create pages for right-hand side of the book
#
mxdPathRight = r"C:\temp\MBExample\maps\Arenac County MB Right.mxd"
tempMapRight = arcpy.mapping.MapDocument(mxdPathRight)
tempDDPRight = tempMapRight.dataDrivenPages
# Loop creates individual pdf's for even numbered pages
#
for pgNumRight in range(2, tempDDPRight.pageCount + 1, 2):
temp_filename = r"C:\temp\MBExample\temp_pdfs\MB_" + \
str(pgNumRight) + ".pdf"
if os.path.exists(temp_filename):
os.remove(temp_filename)
tempDDPRight.exportToPDF(temp_filename, "RANGE", pgNumRight)
# Append right and left-hand pages together in proper order
#
for pgNum in range(1, tempDDPLeft.pageCount + 1):
print "Page", pgNum, "of", tempDDPLeft.pageCount
tempPDF = r"C:\temp\MBExample\temp_pdfs\MB_" + str(pgNum) + ".pdf"
finalPdf.appendPages(tempPDF)
# Update the properties of the final pdf
#
finalPdf.updateDocProperties(pdf_open_view="USE_THUMBS",
pdf_layout="SINGLE_PAGE")
# Save your result
#
finalPdf.saveAndClose()
# Delete variables
#
del finalPdf, mxdPathLeft, mxdPathRight, tempDDPLeft, tempDDPRight,
tempMapLeft, tempMapRight, tempPDF
Las primeras líneas de código importan los módulos necesarios; crean una variable de ubicación de salida donde se guardará el PDF del libro de mapas final; y crea un nuevo documento PDF, vacío, en la carpeta de ubicación de salida especificada. Este PDF es el resultado final para este script.
Programming languages, such as Python, treat a backslash (\) as an escape character. For instance, \n represents a line feed, and \t represents a tab. When specifying a path, a forward slash (/) can be used in place of a backslash. Two backslashes can be used instead of one to avoid a syntax error. A string literal can also be used by placing the letter r before a string containing a backslash so it is interpreted correctly.
Para obtener más información, vea la clase PDFDocument de arcpy.mapping.
Las siguientes líneas de código agregan la página de título y la página del mapa de vista general al PDF final. En este ejemplo se supone que tiene documentos PDF existentes que se pueden utilizar para la página de título y las páginas de mapa de vista general.
A continuación, el código crea páginas controladas por datos para el documento de mapa con el diseño alineado a la izquierda. Se crean PDF utilizando estas páginas controladas por datos para cada página impar. A continuación, esto se repite para las páginas alineadas a la derecha, donde se crean PDF para las páginas pares.
Para obtener más información, vea la clase MapDocument y la clase DataDrivenPages de arcpy.mapping.
Si está utilizando la ventana Python para ejecutar este código, es recomendable que sepa escribir varios comandos para el bucle.
Para introducir líneas después de la primera línea sin ejecutar el bloque de código, después de introducir la primera línea, mantenga presionada la tecla CONTROL y presione INTRO. El cursor se mueve hasta una ventana de comando secundaria (...) en la ventana de Python donde se puede introducir una línea de código adicional. Una vez introducidos todos los comandos de esta manera, presione INTRO dos veces para ejecutar el bloque de código completo.
A continuación, las páginas izquierdas y derechas se deben anexar al PDF final en el orden apropiado.
Finalmente, el código actualiza las propiedades y, a continuación, guarda y cierra el PDF final.