見開きページを含むマップ ブックを作成する

ArcGIS には、マップ ブックを印刷形式または Adobe PDF 形式で作成するために必要なすべてのツールがあります。マップ ブックとは、一緒に印刷またはエクスポートされるページのコレクションのことです。ページの多くにマップが含まれていますが、その他のページは、テキスト、表形式の情報、目次、タイトル ページ、またはその他のコンテンツで構成されていることがあります。

マップの作成者は、見開きを使用して「とじしろ」を確保できます。とじしろとは、マップ ブックのページを製本するために必要なスペースのことです。一般的に、これは、リファレンス マップ ブックとまったく同様に、連続するマップ範囲をカバーするリファレンス シリーズを含んでいるマップ ブックです。ただし、このマップ ブックはリファレンス シリーズとは異なり、2 つのマップ ドキュメント(左のページに 1 つ、右のページに 1 つ)のレイアウトを使用します。シリーズの範囲は、データ ドリブン ページを使用して定義されます。各マップ ドキュメントで同じセットのデータ ドリブン ページを作成します。arcpy.mapping Python スクリプトは、両方のマップ ドキュメントを使用し、左のページと右のページを適切な順序で組み立てて最終的な PDF ドキュメントにします。

シンプル リファレンス シリーズマップ ブックの例

上の例は、見開きのあるミシガン州アレナク郡の地形マップ ブックを示しています。奇数のマップ ページ(たとえば、ページ 3)は、すべてのページ エレメントが左に揃えられているレイアウトであることに注目してください。偶数のマップ ページ(たとえば、ページ 4)は、右に揃えられています。これにより、製本のためのスペースが確保されます。また、ページ番号とロケータ マップがマップ レイアウトごとにページの外側になるように配置されています。それぞれのページの位置揃え(左と右の両方)は、個別の ArcMap ドキュメントに基づいています。このドキュメントは、データ ドリブン ページと arcpy.mapping Python スクリプトを使用して作成できます。

詳細については、「データ ドリブン ページの作成」をご参照ください。

この例には、次の前提が含まれています。

ヒントヒント:

ArcMap を使用して、タイトルと概観図のページを作成できます。各ページの内容を編集し、それぞれを別の PDF ファイルにエクスポートします。

マップ ドキュメントと PDF ファイルの用意ができたら、以下のコードを実行して、最終的なマップ ブックの PDF を作成します。Python ウィンドウまたはスタンドアロンの Python アプリケーションで、このコードを実行することができます。

このトピックのコードは、上記のマップ ブックの例に適用されるものですが、ここに示した手順やヒントを、独自のマップ ブックに適用することもできます。

見開きページを含むマップ ブックを作成します。

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.mapping の「PDFDocument クラス」をご参照ください。

コードの次の行は、最終的な PDF にタイトル ページと概観図のページを追加します。この例は、タイトルと概観図のページに使用できる、既存の PDF ドキュメントがあることを前提としています。

次に、コードによって、左側に配置されるレイアウトを持つマップ ドキュメントのデータ ドリブン ページを作成します。各奇数ページ用のデータ ドリブン ページを使って PDF が作成されます。この動作が右側に配置されるページに対して繰り返されて、偶数ページの PDF が作成されます。

詳細については、arcpy.mapping の「MapDocument クラス」と「DataDrivenPages クラス」をご参照ください。

このコードを実行するために Python ウィンドウを使用している場合、ループの複数コマンドを入力する方法を知っておく必要があります。

コード ブロックを実行せずに 1 行目以降に行を入力するには、1 行目の入力後に Ctrl キーを押しながら、Enter キーを押します。カーソルが [Python] ウィンドウの二次プロンプトに移動し(...)、追加のコード行を入力できるようになります。この方法ですべてのコマンドを入力し終わったら、Enter キーを 2 回押してコード ブロック全体を実行します。

次に、適切な順序で、右側および左側のページを最終版 PDF に追加する必要があります。

最後に、コードによってプロパティが更新され、最終的な PDF を閉じます。

関連トピック

5/10/2014