пятница, 29 апреля 2016 г.

Предотвращение множественной отправки формы

При валидации формы на стороне клиента и длительном сабмите формы, пользователь может нажать кнопку несколько раз, чем вызовет несколько последовательных отправок форм. Эта ошибка исправлена в версии 2.0.8 либо смотреть на github.

понедельник, 25 апреля 2016 г.

iOS9 и AppleTV2

Имеем apple tv2, которой был сделан непривязанный джэйлбрэйк и россыпь apple устройств всех мастей. В какой-то момент устройства перестали иметь возможность транслировать видео на приставку, т.е. приставка видна в AirPlay, но есть возможность транслировать только звук. Беглый поиск выявил проблему - Apple усилила безопасность и обновила протоколы обмена данных, а устройства как раз обновились до iOS9 и El Capitan. 

Меню обновления на AppleTV говорит, что установлена последняя версия, а сброс настроек на заводские не работает - всё ясно, проделки джэйлбрэйка, чтобы случайно не обновить приставку. При подключении к iTunes обновить устройство тоже не удаётся. 

Выход - переводим apple tv в DFU режим:
1. Подключаем питание к приставке
2. Подключаем приставку к ноутбуку
3. Открываем iTunes
4. Зажимаем на пульте кнопки "Вниз" и "Меню" на 6 секунд - диод на приставке начнет мигать
5. Зажимаем на пульте кнопки "Меню" и "Воспроизведение/Пауза" на 6 секунд
6. В iTunes появляется возможность восстановления прошивки AppleTV 
7. Загрузка последней версии прошивки и установка её на приставку произойдет автоматически

четверг, 21 апреля 2016 г.

Aspose.PDF обновление полей

Столкнулся с задачей программного заполнения полей в PDF документе. Под рукой был Aspose.PDF, поэтому воспользовался им.

Вся информация по работе есть в официальных гайдах Aspose, но была пара моментов, которые были не описаны.

Допустим у вас есть файл PDF с полями для заполнения, например это 3-НДФЛ с сайта налоговой.

Чтобы заполнить поле, нужно всего лишь знать его имя, а этого у нас нет, восполним пробел и выгрузим название всех полей в файл.

 Aspose.Pdf.Facades.Form form = new Aspose.Pdf.Facades.Form();  
 form.BindPdf("example.pdf");  
 System.IO.FileStream xmlOutputStream = new FileStream("fields.xml", FileMode.Create);  
 form.ExportXml(xmlOutputStream);  
 xmlOutputStream.Close();  
 form.Dispose();  

В результате получили обычный XML, только беда, есть поля, которые содержат вложенные поля, к ним обратиться по имени не получится, например как изменить значение поля Text6->name2?

 <fields>  
  <field name="Text6">  
   <field name="2">  
    <value>760</value>  
   </field>  
  </field>  
 </fields>  

Для этого получим названия всех полей в PDF, для простоты выгрузим в файл fields.txt

 Aspose.Pdf.Facades.Form form = new Aspose.Pdf.Facades.Form();  
 form.BindPdf("example.pdf");  
 string[] fields = form.FieldNames;  
 StreamWriter sw = new StreamWriter("fields.txt");  
       foreach (string field in fields)  
       {  
         sw.WriteLine(field);  
       }  
 sw.Flush();  
 sw.Close();  

В результате видим, что доступ к дереву полей происходит через точку, а значит полное имя поля выглядит следующим образом Text6.2

Остается только поменять значение этого поля согласно инструкции

 //Create Form Object  
 Aspose.Pdf.Facades.Form pdfForm = new Aspose.Pdf.Facades.Form();  
 //Open Document  
 pdfForm.BindPdf("input.pdf");  
 pdfForm.FillField("Text6.2", "Ура, работает!");  
 //save updated file  
 pdfForm.Save("output.pdf");