Создание атласа с разворотами

ArcGIS предоставляет все инструменты для создания атласов или альбомов карт в печатном виде или в формате Adobe PDF. Альбом (или атлас) — это совокупность страниц, которые вместе выводятся на экспорт или на печать. Многие из этих страниц содержат карты, но некоторые страницы могут содержать какой-либо текст, информацию в табличном виде, таблицу содержания или титульные листы и другие виды данных.

При двусторонней печати атласа необходимо принимать во внимание отступ от края страницы. Этот отступ требуется для переплета страниц атласа. Часто такой атлас представляет собой серию карт с последовательными экстентами, так же как и справочный альбом карт. Однако, в отличие от простого справочного альбома карт, для такого атласа необходимо две компоновки страницы в двух документах карты — для левых и правых страниц. Экстенты альбома карт определяются при помощи многостраничной компоновки. В обоих документах карты будет одинаковый набор страниц. Скрипт Python arcpy.mapping использует оба документа карты для создания конечного PDF-документа, собирая левые и правые страницы в верном порядке.

Пример простого справочного атласа

В вышеприведенном примере показан топографический атлас округа Аренак, штат Мичиган, предназначенный для двусторонней печати. Обратите внимание, что нечетные страницы карт (например, страница 3) имеют такую компоновку, что все элементы страницы сдвинуты влево. Четные страницы (например, страница 4) выровнены вправо. Это требуется для обеспечения отступа на переплет. Кроме того, номера страниц и карты-указатели расположены по-разному на каждой компоновке, они смещены на внешнюю сторону страницы. Левые и правые страницы получены из разных документов ArcMap. Такой документ можно создать при помощи многостраничной компоновки и скрипта Python arcpy.mapping.

Более подробную информацию см. в разделе Создание многостраничных компоновок.

В этом примере предполагается следующее.

ПодсказкаПодсказка:

Титульный лист и обзорную карту можно создать в 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.

Более подробно см. класс "Документы PDF" в arcpy.mapping.

Следующие строки кода предназначены для добавления титульного листа и обзора карт к финальному PDF-файлу. Этот пример предполагает, что у вас уже имеются PDF-документы, которые можно использовать для титульного листа и обзора карт.

Далее код создает многостраничную компоновку для документа карты с левосторонней ориентацией. Для каждой нечетной страницы атласа многостраничная компоновка создает PDF файл. Это действие повторяется для страниц с правосторонней ориентацией. PDF-файлы создаются для четных страниц.

Более подробно см. класс "Документ карты" (MapDocument class) и класс "Многостраничная компоновка" (DataDrivenPages class) в arcpy.mapping.

Если для запуска кода используется окно Python, нужно знать, как вводить в цикл несколько команд.

Чтобы ввести строки, следующие за первой строкой без выполнения блока кода, после ввода первой строки удерживайте нажатой клавишу CTRL и нажмите клавишу ENTER. Появится дополнительное приглашение командной строки (...) в окне Python, которое можно использовать для ввода второй строки кода. Завершив ввод всех команд, нажмите клавишу ENTER дважды, чтобы выполнить весь блок кодов.

Затем левосторонние и правосторонние страницы добавляются в окончательный PDF-файл в должном порядке.

В заключение код обновляет свойства, а затем сохраняет и закрывает финальный PDF-файл.

Связанные темы

5/10/2014