Работа с необработанными документами PDF может быть трудоемкой и разочаровывающей задачей. Из этого туториала вы узнаете, как использовать библиотеку VFR для быстрого доступа, просмотра и просмотра документов PDF в ваших собственных приложениях!
Вступление
Существует много сценариев, в которых может возникнуть необходимость отобразить PDF в приложении для iOS. При этом может быть много сложностей в правильном отображении PDF-файлов. Есть также дополнительные функции, такие как печать, отправка по электронной почте, просмотр закладок, обработка ротации и многое другое, что следует учитывать. Хотя многие из этих функций могут быть несложными для включения, некоторые могут быть очень сложными для правильной работы.
Шаг 1: Установите библиотеку VFR
Для этого приложения мы начнем с создания нового проекта Xcode в виде «приложения с одним представлением». Также мы будем использовать ARC, поэтому убедитесь, что установлен флажок «Использовать автоматический подсчет ссылок».
Обязательные рамки
Наша библиотека PDF «Reader» требует добавления нескольких дополнительных платформ в наш проект: QuartzCore, ImageIO и MessageUI.
Если вы уже знакомы с добавлением фреймворков в проект, то можете пропустить следующую часть и перейти к разделу «Добавление библиотеки в наш проект».
В противном случае, чтобы добавить эти фреймворки, нажмите на свой проект в Навигаторе проектов. Выберите цель, затем найдите вкладку «Фазы сборки» вверху. В разделе «Этапы сборки» разверните раздел «Связать двоичные файлы с библиотеками» и нажмите кнопку «+» в левом нижнем углу.
Теперь добавьте необходимые фреймворки (QuartzCore, ImageIO, MessageUI).
Ваш раздел «Link Binary With Options» теперь должен выглядеть следующим образом:
Добавление библиотеки в наш проект
Нашу библиотеку PDF «Reader» можно скачать с GitHub здесь: https://github.com/vfr/Reader . Теперь мы можем перетащить нашу библиотеку «Reader» в наш проект, и мы почти готовы начать. Я создал новую группу в своем проекте под названием «PDF Reader», где я добавляю библиотеку (вам нужно только включить каталоги «Sources» и «Graphics»).
К сожалению, на данный момент «Reader» не готов к ARC. Итак, нам придется сделать некоторый рефакторинг. Есть три (3) файла, которые нам нужно будет обновить вручную, прежде чем мы сможем сказать XCode рефакторинг для ARC: «ReaderDocument.m», «ReaderContentPage.m» и «ReaderThumbFetch.m» (для справки вы можете найти Основные инструкции для этих файлов здесь: http://www.vfr.org/2012/05/reader-arc-conversion/ .)
По сути, мы собираемся отредактировать каждый из этих файлов, чтобы использовать простые преобразования __bridge, например:
ReaderDocument.m:
+ Изменить
... = [NSString stringWithString:(id)theString];
чтобы …
= [NSString stringWithString:(__bridge id)theString];
ReaderContentPage.m:
+ Изменить
... = CGPDFDocumentCreateX((CFURLRef)fileURL, phrase);
чтобы …
... = CGPDFDocumentCreateX((__bridge CFURLRef)fileURL, phrase);
ReaderThumbFetch.m:
+ Изменить
... = CGImageSourceCreateWithURL((CFURLRef)thumbURL,
чтобы …
... = CGImageSourceCreateWithURL((__bridge CFURLRef)thumbURL, NULL);
С внесенными выше изменениями, перейдите в Edit> Refactor> Convert to Objective-C ARC …
Вам будет предложено «Выберите цели для преобразования». Убедитесь, что ваша текущая цель выбрана, затем нажмите «Проверить» .
Приглашение проведет вас через весь процесс, вы можете просто нажать «Далее» без проблем.
После этого вы сможете просмотреть изменения и выбрать «Сохранить» .
Наконец, нам нужно включить наш заголовок библиотеки «Reader» в наш основной ViewController.h и установить наш контроллер основного представления как ReaderViewControllerDelegate
:
#import "ReaderViewController.h"
@interface MTViewController: UIViewController <ReaderViewControllerDelegate>
Шаг 2: Настройка
Сложная часть настройки нашего проекта закончена. С этого момента можно быстро приступить к просмотру PDF-файлов в наших приложениях — в комплекте с печатью, закладками, миниатюрами, электронной почтой и многим другим!
Прежде всего, давайте добавим демонстрационный PDF в наш проект. Еще раз, я создал новую группу, которую я назвал «PDFs».
Затем я добавил PDF-файл с именем «typo_tips.pdf», который я скачал с fontshop.com, в «каталог ресурсов», который вы можете использовать ( прямая ссылка ). Конечно, не стесняйтесь попробовать любой PDF, который у вас уже есть.
Чтобы открыть наш PDF, мы добавим один UIButton в наш основной ViewController.xib.
Затем мы подключим наш UIButton к методу, который мы будем вызывать didClickOpenPDF
.
Остальная часть работы будет обрабатываться в рамках этого метода didClickOpenPDF в нашем главном ViewController.m.
Сначала мы возьмем наш PDF-документ из нашего пакета приложений.
1
|
NSString *file = [[NSBundle mainBundle] pathForResource:@»typo_tips» ofType:@»pdf»];
|
Далее мы создадим «ReaderDocument», который наш «Reader» сможет просматривать. Обратите внимание, что если бы наш документ был защищен паролем, мы могли бы установить пароль в качестве последнего параметра.
1
|
ReaderDocument *document = [ReaderDocument withDocumentFilePath:file password:nil];
|
Затем мы проверяем, что наш «ReaderDocument» был успешно создан, прежде чем реализовывать наш «ReaderViewController», который будет обрабатывать остальные операции PDF для нас.
1
2
3
|
if (document != nil)
{
}
|
И между скобками в проверке «документ» мы загрузим наш объект «ReaderViewController».
1
2
3
4
5
|
if (document != nil)
{
ReaderViewController *readerViewController = [[ReaderViewController alloc] initWithReaderDocument:document];
readerViewController.delegate = self;
}
|
В этом примере мы представим наш «ReaderViewController» как модальное представление, хотя мы могли бы альтернативно представить его с UINavigationController, если бы наше приложение использовало UINavigationController. У нас есть различные варианты стиля представления и перехода, которые мы могли бы использовать для нашего ModalViewController, поэтому я рекомендую вам поэкспериментировать со стилями, которые лучше всего подходят для вашего приложения. В этом случае мы попытаемся имитировать нативный стиль Apple PDF от iBooks.
Добавьте следующие строки после «readerViewController.delegate = self;».
1
2
|
readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
readerViewController.modalPresentationStyle = UIModalPresentationFullScreen;
|
Наконец, нам нужно представить наш ModalViewController:
1
|
[self presentModalViewController:readerViewController animated:YES];
|
Как вы можете видеть, после того, как мы включили нашу библиотеку «Reader», относительно просто просматривать и взаимодействовать с PDF-файлами в наших приложениях для iOS. Вот весь метод, который мы использовали:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
— (IBAction)didClickOpenPDF:(UIButton *)sender {
NSString *file = [[NSBundle mainBundle] pathForResource:@»typo_tips» ofType:@»pdf»];
ReaderDocument *document = [ReaderDocument withDocumentFilePath:file password:nil];
if (document != nil)
{
ReaderViewController *readerViewController = [[ReaderViewController alloc] initWithReaderDocument:document];
readerViewController.delegate = self;
readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
readerViewController.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentModalViewController:readerViewController animated:YES];
}
}
|
Если вы запустите и создадите наше приложение сейчас, вы увидите множество функций, уже работающих для вашей программы просмотра PDF.
Есть только одна последняя вещь, которую мы должны обработать: закрытие нашего PDF Reader ViewController, когда пользователь нажимает кнопку «Готово».
Это обрабатывается простым, простым методом:
1
2
3
|
— (void)dismissReaderViewController:(ReaderViewController *)viewController {
[self dismissModalViewControllerAnimated:YES];
}
|
Шаг 3: Варианты
Как упоминалось ранее, библиотека «Reader» поддерживает многие из этих функций, помимо отображения PDF-файлов, такие как печать, закладки и т. Д. По умолчанию большинство этих функций включено. Тем не менее, вы можете выбрать их для каждого приложения, отредактировав файл «ReaderConstants.h». Каждая из этих функций перечислена на странице GitHub «Reader», которую я покажу здесь:
- READER_BOOKMARKS — если TRUE, включает поддержку закладки страницы.
- READER_ENABLE_MAIL — если TRUE, кнопка электронной почты добавляется на панель инструментов
(если устройство правильно настроено для поддержки по электронной почте). - READER_ENABLE_PRINT — если TRUE, кнопка печати добавляется на панель инструментов
(если печать поддерживается и доступна на устройстве). - READER_ENABLE_THUMBS — если TRUE, кнопка превью добавлена на панель инструментов
(Включение навигации по миниатюрам страниц документа). - READER_DISABLE_IDLE — если TRUE, таймер простоя iOS отключен во время
просмотр документа (остерегайтесь разряда батареи). - READER_SHOW_SHADOWS — если TRUE, тень отображается на каждой странице
и содержание страницы вставлено парой дополнительных пунктов. - READER_STANDALONE — если FALSE, кнопка «Готово» добавляется на панель инструментов
и -dismissReaderViewController: метод делегата передается, когда
это прослушивается. - READER_DISABLE_RETINA — если TRUE, устанавливает CATiledLayer contentScale
до 1.0f. Это эффективно отключает поддержку сетчатки и приводит к
скорости рендеринга устройств без сетчатки на устройствах дисплея сетчатки при
потеря качества отображения сетчатки.
В следующий раз: написание PDF документов
Теперь вы видели, как легко можно просматривать PDF-файлы в iOS. В следующем руководстве этой серии мы рассмотрим некоторые способы создания собственных PDF-файлов в наших приложениях.