ArcGIS教程:创建包含对开页面的地图册

来源:互联网 发布:java 身份证识别 开源 编辑:程序博客网 时间:2024/05/16 12:47

  ArcGIS 提供了创建地图册(打印或 Adobe PDF 格式)所需的所有工具。地图册是统一打印或导出的一组页面。其中许多页面都包含地图,而其他页面可包含文本、表格信息、内容列表或标题页及其他内容。

  地图作者可利用对开页面解决地图册的装订线问题。装订线是为了对地图册页面进行装订而需要留出的空白。这通常是包含覆盖连续地图范围的参考系列的地图册,类似于参考地图册。然而,与参考系列不同的是,此地图册使用两个地图文档的布局:一个用于左侧页面,一个用于右侧页面。地图册系列范围使用“数据驱动页面”进行定义。在每个地图文档中创建一组相同的“数据驱动页面”。arcpy.mapping Python 脚本将同时使用这两个地图文档,并将左侧和右侧页面以正确顺序编入 PDF 文档。

  以上示例显示了密歇根州阿勒纳克县的地形图册(包含对开页面)。请注意,编号为奇数的地图页面(例如第 3 页)具有布局对齐。这样,所有页面元素都向左侧偏移。编号为偶数的地图页面(例如第 4 页)向右侧对齐。这样便留出了地图册装订的空间。此外,还为每个地图布局定位了页码和定位器地图,以使它们位于页面之外。每种页面对齐方式(左右两侧)都基于一个单独的 ArcMap 文档。可使用“数据驱动页面”和 arcpy.mapping Python 脚本创建此文档。

  此示例基于以下前提假设:

  • 拥有两个已启用“数据驱动页面”的现有地图文档,其中一个文档设置为左侧页面,另一文档设置为右侧页面。此代码示例适用于使用 ArcGIS 构建地图册中呈现的简单参考系列地图册示例。使用“数据驱动页面”创建地图后,需要创建地图文档的副本。生成两个副本后,可重新定向每个文档中的地图元素,使得一个布局定向到左侧,另一个布局定向到右侧。为地图文档命名时,请确保能够根据名称区分出哪个是最终地图册的左侧页面,哪个是右侧页面。由于地图册需要显示页码,因此应确保“数据驱动页面”的起始页码值足够大以便涵盖最终地图册中起始页面前面的所有页。在本例中,地图页的前面有两页。因此,地图页应从第 3 页开始。请确保设置数据驱动页面 对话框中起始页码的值为 3。
  • 已具有地图册标题页 PDF 文件。
  • 已具有包含总览图页的 PDF 文件。

  如果已准备好地图文档和 PDF 文件,便可运行以下代码创建最终地图册 PDF。Python 窗口或独立 Python 应用程序中都可以运行此代码。

  虽然本主题中的特定代码仅适用于上述示例地图册,但您可以将此处介绍的过程和技巧应用到自己的地图册中。

  创建包含对开页面的地图册 PDF。

  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

  最开始几行代码表示,导入所需模块;创建保存最终地图册 PDF 的输出位置变量;在指定的输出位置文件夹中创建新的空 PDF 文档。该 PDF 即是该脚本的最终输出。

  接下来几行代码表示将标题页和总览图页添加到最终 PDF。本示例的前提假设是存在可用作标题页和总览图页的现有PDF 文档。

  接下来的代码表示为地图文档创建布局左对齐的“数据驱动页面”。各奇数页的 PDF 即使用这些“数据驱动页面”创建完成。对右对齐的页面重复以上步骤,即可为偶数页创建 PDF。

  如果使用 Python 窗口运行此代码,应该了解如何为循环输入多条指令。

  输入第一行命令后,要想接着输入代码行而不执行代码块,请在第一行命令输入完成后按住 CTRL 键并按 ENTER。光标即会移动到 Python 窗口的二级提示符 (...) 处,此时便可输入其他代码行。按此种方式输入完所有命令后,按两次ENTER 便可执行整个代码块。

  接下来,需要将左侧和右侧页面按照正确的顺序追加到最终 PDF。

  最后的代码表示对属性进行更新,然后保存和关闭最终 PDF。

0 0
原创粉丝点击