Работа с представлением PDF-документа

Требования к операционной системе: iOS 5.0 и выше.

Мобильное устройство: iPad.

Описание

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

См. также:

Примеры использования компонентов