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.

Ejemplo de libro de mapas de serie de referencia simple

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:

SugerenciaSugerencia:

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.

SugerenciaSugerencia:

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.

Temas relacionados

5/10/2014