Получение информации о листе регламентного отчета

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

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

Описание

В данном примере описывается получение информации о листе регламентного отчета. После запуска примера выполняются следующие операции:

Исходный код

Для выполнения примера необходимо разместить в теле метода 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;
        // Получаем представление просмотрщика регламентных отчетов
        MAProceduralReportDataViewControllerBase *reportDataViewControllerBase = (MAProceduralReportDataViewControllerBase *)dataViewController;
        // Получаем источник данных регламентного отчета из представления просмотрщика листов
        id<MAProceduralReportViewControllerDelegate> dataSource = [dataViewController dataSource];
        // Получаем количество листов
        int worksheetCount = [dataSource worksheetCount];
        if(worksheetCount > 0)
        {
            // Проверяем, является ли выбранный лист видимым
            if([dataSource isWorksheetVisibleAtIndex:worksheetCount - 1] == YES)
            {
                // Выводим в консоль среды разработки наименование и ключ листа регламентного отчета
                NSString *worksheetName = [dataSource worksheetNameAtIndex:worksheetCount - 1];
                int worksheetKey = [dataSource worksheetKeyAtIndex:worksheetCount - 1];
                NSLog(@"Лист регламентного отчета: %@, ключ: %d",worksheetName, worksheetKey);
                // Проверяем, является ли выбранный лист PDF-документом
                if([[dataSource worksheetExtAtIndex:worksheetCount - 1] isEqualToString:@"pdf"] == YES)
                {
                    // Получаем путь к листу регламентного отчета
                    NSString *worksheetFullpath = [dataSource worksheetFullpathAtIndex:worksheetCount - 1];
                    // Получаем URL листа регламентного отчета
                    CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:worksheetFullpath];
                    // Открываем PDF-документ
                    CGPDFDocumentRef pdfDocument = CGPDFDocumentCreateWithURL(url);
                    // Получаем первую страницу (в PDF-документе страницы нумеруются с первой)
                    CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDocument, 1);
                    // Получаем объект страницы
                    PdfPage *page = [[PdfPage alloc] initWithPage:pdfPage];
                    // Выводим в консоль среды разработки информацию о странице
                    float width = [page width];
                    float heght = [page height];
                    float scale = [page scale];
                    CGFloat offset = [page offset];
                    NSLog(@"Ширина страницы: %f, высота страницы: %f", width, heght);
                    NSLog(@"Коэффициент масштабирования страницы: %f, отступ страницы от начала документа: %f", scale, offset);
                }
            }
        }
        // Получаем индекс текущей страницы
        int currentPage = [dataViewController currentPage];
        // Проверяем, существует ли следующая страница
        if(currentPage + 1 < [dataViewController pagesCount])
        {
            // Переходим к следующей странице
            [dataViewController jumpToPage: currentPage + 1];
        }
        // Получаем PNG-данные для скриншота
        NSData *data = [reportDataViewControllerBase workspacePNGData];
        // Создаем изображение на основе полученных данных
        UIImage *image = [[UIImage alloc] initWithData:data];
        // Выводим на экран мобильного устройства полученное изображение
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        [self.view addSubview:imageView];
    }
}

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

Лист регламентного отчета: Map, ключ: 10

Ширина страницы: 841.124390, высота страницы:  594.538574

Коэффициент масштабирования страницы:  1.000000, отступ страницы от начала документа:  0.000000

 

Также на экране мобильного устройства будет отображен скриншот страницы регламентного отчета, к которой был осуществлен переход:

См. также:

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