Прокрутите до определенной страницы с помощью CGPDF

Я поражен этим прошлым двумя днями, я не нахожу никаких надлежащих документов, касающихся CGPDF. Я пытался всеми возможными способами, но я потерпел неудачу. Вот что я пытаюсь сделать. У меня есть PDF для отображения, и я отображаю его в UIWebView. Я создал ссылку на документ CORE GRAPHICS PDF, используя путь к файлу pdf (NSURL). Я создал UIView поверх него и обработал одно касание. Когда файл PDF загружается, и пользователь нажимает на вид, я хочу, чтобы страница прокручивалась до определенной страницы. Я знаю, что это можно сделать с помощью расчета высоты и ширины страницы. Я хотел знать, есть ли способ в CGPDF для передачи номера страницы и прокрутки до соответствующей страницы. Ниже мой код

- (void)viewDidLoad
{
    [super viewDidLoad];

    // set the pdfPafeHeight to -1 so it gets calculated.
    self.pdfPageHeight = -1;

    // set the delegate of the UIWebView's underlying UIScrollView to self.
    self.webView.scrollView.delegate = self;

    // create an NSURLRequest to load the PDF file included with the project
    _filePath = [[NSBundle mainBundle] pathForResource:@"Sample" ofType:@"pdf"];
    _url = [NSURL fileURLWithPath:_filePath isDirectory:NO];
    _urlRequest = [NSURLRequest requestWithURL:_url];

    // create a Core Graphics PDF Document ref using the same NSURL
     _pdf = CGPDFDocumentCreateWithURL((CFURLRef) _url);

    // use CGPDFDocumentGetNumberOfPages to get the number of pages in the document
    self.pdfPageCount = (int)CGPDFDocumentGetNumberOfPages(_pdf);

    // load the PDF file into the UIWebVie

    UITapGestureRecognizer *singleFingerTap =
    [[UITapGestureRecognizer alloc] initWithTarget:self
                                            action:@selector(handleSingleTap:)];
    [self.view addGestureRecognizer:singleFingerTap];

    [self.webView loadRequest:_urlRequest];
}

ЗДЕСЬ КАК Я ХОЧУ ОБРАЩАТЬСЯ К ОДНОМ КАРТУ НА UIVIEW Я просто хотел знать, есть ли какой-нибудь метод в CGPDF для прокрутки на определенную страницу, когда я передаю ей номер страницы

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {


}

1 ответ

Решение

Там нет API для того, что вы пытаетесь достичь, и даже если вы можете использовать частный API, если это приложение только для установки Enterprise и не нужно идти в App Store - это будет сложно и любой обходной путь скорее всего сломается с серьезным обновлением версии iOS. Если вы хотите пойти по этому пути, вы можете проанализировать иерархию контроллера представления и обнаружить, что у Apple есть внутренняя структура под названием CorePDF, которая имеет внутренний частный API, к которому вы можете иметь доступ, но будьте осторожны и знайте, что это не решение для приложений App Store.

Альтернатива - начать с нуля и использовать CGContextDrawPDFPage рисовать страницы PDF, создавая собственный кеш, прокручивая представления и контроллеры представления + обработка жестов. Мы сделали это с помощью коммерческого пакета PSPDFKit SDK, над которым я работаю с 2010 года - это больше работы, чем вы думаете. В конечном итоге мы также перешли на использование специального средства рендеринга, чтобы улучшить совместимость с широким диапазоном доступных файлов PDF и обеспечить более высокую производительность, чем рендерер Apple, однако не в каждом случае использования этого может потребоваться.

Другие вопросы по тегам