PrintPDF task - пустой pdf на отдельных участках карты

0 голосов
спросил 16 Сен, 14 от mosvodostok (440 баллов) в категории Программные продукты Esri
При выполнении серверной задачи экспорт в pdf (скрипт python, опубликован как геосервис) на отдельных участках карты сервис "качественной" печати выдает пустой pdf (размер файла - 0 байт, т.е. даже без зарамочного оформления).
Под "качественной" подразумеваю экспорт векторных слоев, собранных из шаблонного mxd-документа. На других участках карты, а также при экспорте в другой формат (например png) получаем нормальный результат. Впечатление, что питоновский метод arcpy.mapping.ExportToPDF(mxd, Output_File) отваливается по таймауту, при этом задача отрабатывает без ошибок и итоговый файл отдается клиенту. Куда копать?
p.s. недавно обновили Arcgis Server с 10.2. на 10.2.2

8 Ответы

0 голосов
ответил 16 Сен, 14 от Grigoriy (127,020 баллов)
Для начала в журнал сервера.
Перевести журнал в режим отладки, запуститьзадачу и посмотреть, что пишется в журнале.
http://resources.arcgis.com/ru/help/main/10.2/0154/01540000041n000000.htm
Если настройки сервиса стоят по умолчанию, то задача снимается не ранее, чем через 10 минут.
http://resources.arcgis.com/en/help/main/10.2/0154/015400000343000000.htm
http://resources.arcgis.com/ru/help/main/10.2/#/Tuning_and_configuring_services/015400000343000000/
maximum usage time (максимальное время использования сервиса клиентом)= 600 sec (10 minutes).
0 голосов
ответил 16 Сен, 14 от mosvodostok (440 баллов)
Григорий, благодарю за оперативный ответ.
Включил серверные логи на максимальную детализацию - никаких ошибок и предупреждений (только сообщения класса Verbose, Fine, Debug об успешном выполнении отдельных задач).
Более того, при низкой нагрузке на сервер (в обеденный перерыв) удалось один раз "распечатать" карту в pdf на проблемном участке и с разницей в несколько минут аналогичным запросом (т.е. тот же экстент, состав слоев, формат, масштаи т.п.) получить "пустой" pdf.
Количество и тип сообщений в логах для "успешной" и "неудавшейся" печати - идентичны. Привести все сообщения лога на форуме мне не удалось (после вставки в спойлер 2600 строк - страница зависла), могу отправить на почту если это поможет.
Сервис отрабатывает в пределах 1 минуты, поэтому таймаут по параметру maximum usage time = 600 sec - неактульно.
Сервис отрабатывает (Job status : EsriJobSucceeded) и выдает результат - ссылку на скачивание вида:
http://hostname/arcgis/rest/directories/arcgisjobs/tools/printpdftest_gpserver/jf774480c61814205a317e2fadbd1eb6d/scratch/WebMap_dfdce6c0-3d7d-11e4-be95-005056866d01.PDF
Этот файл всегда создается, но в одном случае он имеет зарамочное оформление и карту, в другом пустой файл весом 0 кБ. :(
Куда еще можно и нужно копать?
0 голосов
ответил 17 Сен, 14 от mosvodostok (440 баллов)
Эксперименты продолжаются и вот, что мы имеем:
Экспортируемые файлы pdf при одинаковых входных параметрах получаются трех типов:
  • пустые (вес файла 0 кБ)
  • нормальные (вся карта отрисована правильно)
  • и "битые" - карта отрендерена, но с ошибками
"Битые" pdf могут иметь следующие дефекты:
  • разбитые составные символы (элементы смещены друг относительно друга - символ "разъезжается" ;)
  • неполностью отрисованные составные символы (например отсутствует заливка)
  • изменение шрифта в подписи на символьный (квадратики - трегольнички и т.п. вместо букв-цифр)
  • изменение масштаба символов (один символ увеличивается в 100 раз и занимает четверть страницы)
Питоновский скрипт был доработан для вывода в pdf и png при каждом выводе сервиса, т.е при уже сформированном документе карты дважды вызывается функция экспорта:
if format.lower() == 'pdf':
arcpy.mapping.ExportToPDF(mxd, Output_File)
arcpy.mapping.ExportToPNG(mxd, Output_File, resolution=resolution)
При этом на выходе получаем различные сочетания:
нормальный pdf - пустой png
пустой pdf - нормальный png
битый pdf - нормальный png
пустой- пустой
и т.д.
Вес пустых png - 31 kB.
Результаты эксперимента показывают, что сам mxd в памяти собирается корректно, а проблемы именно в функцияхarcpy.mapping.ExportTo...
Григорий?
0 голосов
ответил 17 Сен, 14 от Grigoriy (127,020 баллов)
Для начала:
http://support.esri.com/en/downloads/patches-servicepacks/view/productid/66/metaid/2130
Не факт, что он нужен, но не помешает.
Далее предлагаю поэкспериментировать с выходным разрешением.
Просто проверить будет ли нормально формироваться печать при меньшем dpi.
http://support.esri.com/en/knowledgebase/techarticles/detail/34291
Попробовать также ExportToEPS - просто проверить зависит ли вывод от выходного формата (не в картинку).
Потомс наборами слоев, которые экспортируются.
Т.е. выключать по очереди и смотреть результат.
Возможно проблема в данных.
А когда накопятся данные (если это баг) можно будет искать на support.esri.com.
http://search.esri.com/results/index.cfm?do=support.index&start=0&as_q=&site=&dr=0&startDate=&REQUIREDFIELDS=%28search-category%3Abugs%2Fnimbus%29&num=10&FILTER=p&SEARCHVIEW=all&FILTERID=2&getfields=*&endDate=&q=export+pdf+10.2
0 голосов
ответил 17 Сен, 14 от mosvodostok (440 баллов)
Григорий добрый день.
Патч установили, драйвера плоттера установили, вывод в тестовых целях осущствляем последовательно в три различных формата:
    arcpy.mapping.ExportToPDF(mxd, Output_File, compress_vectors=False)
arcpy.mapping.ExportToPNG(mxd, Output_File, resolution=resolution)
arcpy.mapping.ExportToEPS(mxd, Output_File)
Не помогает ((( EPSы тоже периодически получаются битыми (изображение присутствует, но с артефактами) или пустыми.
Проблема - форматонезависима.
Все три файла в отдельных заданиях могут генериться с изображением (при близком рассмотрении практически везде есть ошибки отрисовки) или быть пустыми.
Принудительное низкое разрешение в 96 dpi - не влияет на частоту ошибок.
Набор слоев.
Попробовал печатать одну базовую карту без дополнительных операциооных слоев, на выходе как и раньше - то битые, то нормальные, то пустые.
Попробовал печатать один операционный слой без базовой карты - та же ситуация (((.
Данная функция (экспорт в pdf) является одной из наиболее востребованных на предприятии в среде веб-пользователей ГИС, а работатет (с недавних пор) - крайне нестабильно.
Существует ли простой способ "даунгрэйда" Arcgis Server 10.2.2 до версии 10.2, т.к. до "апгрэйда" таких проблем вроде бы не было?
0 голосов
ответил 17 Сен, 14 от Grigoriy (127,020 баллов)
Возможно на нагруженном сервере просто не хватает ресурсов для выполнения задачи.
Памяти и т.д.
Можно попробовать добавить дополнительный узел в кластер и отдать ему сервис печати.
"Даунгрейд" как всегда очень прост - снести сервер и установить старую версию :) .
Для 10.2.2->10.2 это уже просто:
1. Экспортировать сайт - http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#/Export_Site/02r30000020s000000/
2. Снести сервер.
3. Установить 10.2.
4. Создать новый сайт по-умолчанию.
5. Импортировать "старый" сайт. http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#/Import_Site/02r30000020p000000/
0 голосов
ответил 18 Сен, 14 от mosvodostok (440 баллов)
По поводу ресурсов - всего хватает. Загрузка ЦП и памяти не более 60%.
Возможно криво установили сервиспак - попробуем переустановить сервер.
Григорий, отдельное спасибо за информацию по экспорту-импорту сайта. Не был в курсе и если это реально работает, то очень облегчит жизнь!
0 голосов
ответил 01 Окт, 14 от Grigoriy (127,020 баллов)
"Хватает" это может быть только "видимостью".
На всякий случай, сразу рекомендую:
http://resources.arcgis.com/ru/help/main/10.2/0154/0154000005tn000000.htm
http://gisserver.domain.com:6080/arcgis/admin
http://gisserver.domain.com:6080/arcgis/admin/machines/gisserver.local/edit
App server maximum heap size (in MB): от 2048 до 4096
SOC maximum heap size (in MB): 1024
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...