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

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

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

简单参考系列地图册示例

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

有关详细信息,请参阅创建数据驱动页面

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

提示提示:

使用 ArcMap 便可以创建标题页和总览图页。编写每种页面的内容然后将各页面导出为单独的 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 即是该脚本的最终输出。

提示提示:

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.

有关详细信息,请参阅 arcpy.mappingPDFDocument 类

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

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

有关详细信息,请参阅 arcpy.mappingMapDocument 类DataDrivenPages 类

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

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

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

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

相关主题

5/10/2014