見開きページを含むマップ ブックを作成する
ArcGIS には、地図帳を印刷形式または Adobe PDF 形式で作成するために必要なすべてのツールがあります。地図帳とは、一緒に印刷またはエクスポートされるページのコレクションのことです。ページの多くにマップが含まれていますが、その他のページはテキスト、表形式の情報、目次などのコンテンツのみで構成されていたり、タイトル ページであったりします。
マップの作成者は、見開きを使用して「とじしろ」を確保できます。とじしろとは、地図帳のページを製本するために必要なスペースのことです。一般的に、これは、リファレンス地図帳とまったく同様に、連続するマップ範囲をカバーするリファレンス シリーズを含んでいる地図帳です。ただし、この地図帳は、シンプル リファレンス シリーズとは異なり、2 つのマップ ドキュメント(左のページに 1 つ、右のページに 1 つ)のレイアウトを使用します。シリーズの範囲は、データ ドリブン ページを使用して定義されます。各マップ ドキュメントで同じセットのデータ ドリブン ページを作成します。arcpy.mapping Python スクリプトは、両方のマップ ドキュメントを使用し、左のページと右のページを適切な順序で組み立てて最終的な PDF ドキュメントにします。
上の例は、見開きのあるミシガン州アレナク郡の地形地図帳を示しています。奇数のマップ ページ(たとえば、ページ 3)は、すべてのページ エレメントが左に揃えられているレイアウトであることに注目してください。偶数のマップ ページ(たとえば、ページ 4)は、右に揃えられています。これにより、製本のためのスペースが確保されます。また、ページ番号とロケータ マップがマップ レイアウトごとにページの外側になるように配置されています。それぞれのページの位置揃え(左と右の両方)は、個別の ArcMap ドキュメントに基づいています。このドキュメントは、データ ドリブン ページと arcpy.mapping Python スクリプトを使用して作成できます。
詳細については、「データ ドリブン ページの作成」をご参照ください。
この例には、次の前提が含まれています。
- 1 つのドキュメントが左側のページに、もう 1 つのドキュメントが右側のページに設定され、[データ ドリブン ページ] が有効になっている 2 つの既存のマップ ドキュメントが存在する。
このコード例を、「ArcGIS を使ったマップ ブックの作成」で示されている、シンプル リファレンス シリーズ マップ ブックの例に使用します。
このマップ ブックは、次のヘルプ トピックで説明する手順に従って、再作成することができます。マップ ブックの開始インデックス フィーチャ(格子状)の作成インデックス フィーチャ(格子状)レイヤの変更データ ドリブン ページの有効化マップ ブックにロケータ マップを作成するマップ ブックへのダイナミック テキストの追加マップ ブックのエクスポートデータ ドリブン ページを使ってマップを作成したら、マップ ドキュメントのコピーを作成する必要があります。2 つのコピーがある場合には、1 つのレイアウトが左側に、もう 1 つのレイアウトが右側に配置されるように、各ドキュメントのマップ エレメントを再配置することができます。マップ ブックの左側用と右側用のマップ ドキュメントを区別できるように、マップ ドキュメントに名前を付ける必要があります。マップ ブックにはページ番号が表示されるため、データ ドリブン ページの開始ページ番号には、必ずその前にある最終的なマップ ブックの全ページを含めた番号を設定する必要があります。この例の場合、マップ ページの前に 2 ページあるので、マップ ページは ページ 3 から開始します。[データ ドリブン ページの設定] ダイアログ ボックスの [開始ページ番号] の値が「3」になっていることを確認します。
- マップ ブックのタイトル ページとして、既存の PDF ファイルが存在する。
- 概観図ページを含む、既存の PDF ファイルが存在する。
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 を閉じます。