Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с отображением PDF-документа. После запуска примера выполняются следующие операции:
извлекается представление просмотрщика листов регламентного отчета;
извлекается URL текущего документа регламентного отчета;
создается PDF-документ с помощью полученного URL;
создается новое представление PDF-документа;
для созданного отображения устанавливается PDF-документ;
в созданном отображении показывается подсказка о номере страницы;
извлекается отображение содержимого в PDF-документе;
для созданного отображения устанавливается родительское представление;
в созданном отображении устанавливается делегат поиска по PDF-документу;
по PDF-документу осуществляется поиск страниц, содержащих указанную строку;
останавливается поиск по PDF-документу.
В базовый пример «Отображение регламентного отчёта» необходимо добавить следующий файл:
SearchDelegate.h/.m. Делегат для поиска по PDF-документу.
Для выполнения примера необходимо создать класс делегата для поиска по PDF-документу, в котором реализованы действия, которые необходимо произвести при обнаружении заданного текста и завершении поиска, а также добавить заголовочный файл класса в исходный код класса ViewController (см. раздел «Отображение регламентного отчёта»). Далее необходимо разместить в теле метода executeExample класса ViewController следующий код:
// Удаляем все дочерние представления окна
NSArray *reportSubviews = [self.view subviews];
for(UIView *subView in reportSubviews)
{
[subView removeFromSuperview];
}
// Получаем объект регламентного отчета
MAProceduralReportViewController *proceduralReportController = (MAProceduralReportViewController *)m_controller;
// Получаем массив представлений в регламентном отчете
NSArray *dataViewControllers = [proceduralReportController dataViewControllers];
// Перебираем в цикле представления регламентного отчета
for( UIViewController *controller in dataViewControllers)
{
// Проверяем, является ли текущее представление просмотрщиком листов регламентного отчета
if([controller isMemberOfClass:[MAProceduralReportDataViewController class]])
{
// Получаем представление просмотрщика листов
MAProceduralReportDataViewController *dataViewController =(MAProceduralReportDataViewController *)controller;
// Получаем URL текущего документа регламентного отчета
NSURL *url = [dataViewController urlForCurrentDocument];
CFURLRef urlForCurrentDocument = (CFURLRef)url;
// Создаем PDF-документ с помощью полученного URL
CGPDFDocumentRef pdfDocument = CGPDFDocumentCreateWithURL(urlForCurrentDocument);
// Создаем представление PDF-документа
PdfView *pdfView = [[PdfView alloc] initWithFrame:self.view.bounds];
// Загружаем PDF-документ в данное представление
[pdfView setDocument:pdfDocument];
// Выводим на экран мобильного устройства представление PDF-документа
[self.view addSubview: pdfView];
// Показываем в отображении подсказку о номере страницы
[pdfView showPageLabel:YES];
// Получаем отображение содержимого в PDF-документе
UIView *contentView = [pdfView contentView];
// Получаем границы отображения содержимого в PDF-документе
CGRect bounds = [contentView bounds];
// Выводим в консоль среды разработки ширину и высоту отображения
NSLog(@"Ширина содержимого представления PDF-документа: %f", bounds.size.width);
NSLog(@"Высота содержимого представления PDF-документа: %f", bounds.size.height);
// Указываем контроллер для работы с родительским представлением PDF-документа
[pdfView setReportViewController:(UIViewController<PdfSearchDelegate> *)dataViewController];
UIViewController *reportController = [pdfView reportViewController];
// Определяем ширину и высоту родительского представления PDF-документа
CGRect reportControllerBounds =[[reportController view] bounds];
NSLog(@"Ширина родительского представления PDF-документа: %f", reportControllerBounds.size.width);
NSLog(@"Высота родительского представления PDF-документа: %f", reportControllerBounds.size.height);
// Создаем делегат поиска по PDF-документу
SearchDelegate *searchDelegate = [[SearchDelegate alloc] init];
// Устанавливаем делегат поиска для представления PDF-документа
[pdfView setSearchDelegate:searchDelegate];
// Осуществляем поиск страниц в PDF-документе, содержащих указанную строку
[pdfView findPagesComprisingString:@"Spain"];
}
}
В результате выполнения примера на экране мобильного устройства будет показано представление PDF-документа:

Также в консоли среды разработки будет выведена информация о родительском представлении PDF-документа, а также о содержимом PDF-документа:
Ширина содержимого представления PDF-документа: 768.000000
Высота содержимого представления PDF-документа: 1004.000000
Ширина родительского представления PDF-документа: 768.000000
Высота родительского представления PDF-документа: 960.000000
В момент обнаружения заданного текста в консоли среды разработки будет выведено сообщение с номером страницы PDF-документа, на которой была найдена заданная строка:
Заданный текст найден на странице 3
После завершения поиска в консоли среды разработки будет выведено соответствующее сообщение:
Поиск текста завершен
Далее необходимо в теле метода executeExample разместить перед строками:
// Осуществляем поиск страниц в PDF-документе, содержащих указанную строку [pdfView findPagesComprisingString:@"Spain"];
следующий код:
// Останавливаем поиск страниц в PDF-документе [pdfView stopSearching];
В результате выполнения обновленного примера поиск будет остановлен, поэтому сообщение с номером страницы PDF-документа, на которой была найдена заданная строка, не будет выведено в консоли среды разработки.
См. также: