Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описывается получение информации о листе регламентного отчета. После запуска примера выполняются следующие операции:
извлекается количество листов в регламентном отчете;
осуществляется проверка того, является ли выбранный лист видимым;
извлекается наименование выбранного листа;
извлекается ключ выбранного листа;
извлекается расширение листа;
извлекается путь к листу регламентного отчета;
создается объект PDF-страницы на основе информации, полученной с помощью пути к листу регламентного отчета;
из объекта PDF-страницы извлекаются ширина и высота страницы;
извлекаются коэффициент масштабирования и отступ от начала документа для объекта PDF-страницы;
извлекаются индекс текущей страницы и количество страниц в документе с помощью методов протокола <ProceduralDelegate>;
осуществляется переход к указанной странице документа;
извлекаются PNG-данные текущей страницы регламентного отчета для скриншота.
Для выполнения примера необходимо разместить в теле метода 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
Также на экране мобильного устройства будет отображен скриншот страницы регламентного отчета, к которой был осуществлен переход:

См. также: