Как я могу создать PDF-файл с «реальным» текстовым контентом на iOS?

Я хочу создать красивый PDF-файл в моем приложении iOS 6.

Я пробовал:

  • Отображение UIView в контексте
  • Использование CoreText
  • Использование NSString drawInRect
  • Использование UILabel drawRect

Вот пример кода:

-(CGContextRef) createPDFContext:(CGRect)inMediaBox path:(NSString *) path { CGContextRef myOutContext = NULL; NSURL * url; url = [NSURL fileURLWithPath:path]; if (url != NULL) { myOutContext = CGPDFContextCreateWithURL ((__bridge CFURLRef) url, &inMediaBox, NULL); } return myOutContext; } -(void)savePdf:(NSString *)outputPath { if (!pageViews.count) return; UIView * first = [pageViews objectAtIndex:0]; CGContextRef pdfContext = [self createPDFContext:CGRectMake(0, 0, first.frame.size.width, first.frame.size.height) path:outputPath]; for(UIView * v in pageViews) { CGContextBeginPage (pdfContext,nil); CGAffineTransform transform = CGAffineTransformIdentity; transform = CGAffineTransformMakeTranslation(0, (int)(v.frame.size.height)); transform = CGAffineTransformScale(transform, 1, -1); CGContextConcatCTM(pdfContext, transform); CGContextSetFillColorWithColor(pdfContext, [UIColor whiteColor].CGColor); CGContextFillRect(pdfContext, v.frame); [v.layer renderInContext:pdfContext]; CGContextEndPage (pdfContext); } CGContextRelease (pdfContext); } 

Представленные UIView содержат только UIImageView + кучу UILabels (некоторые с некоторыми и без границ).

Я также попробовал предложение, найденное в stackoverflow: подклассификация UILabel и это:

 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { BOOL isPDF = !CGRectIsEmpty(UIGraphicsGetPDFContextBounds()); if (!layer.shouldRasterize && isPDF) [self drawRect:self.bounds]; // draw unrasterized else [super drawLayer:layer inContext:ctx]; } 

Но это ничего не изменило.

Независимо от того, что я делаю, при открытии PDF-файла в предварительном просмотре текстовые части можно выбрать как блок, но не символ на символ, а масштабирование в формате pdf показывает, что это фактически растровое изображение.

Какие-либо предложения?

Этот учебник от Raywenderlich спас мой день. Надеюсь, это сработает и для вас. http://www.raywenderlich.com/6818/how-to-create-a-pdf-with-quartz-2d-in-ios-5-tutorial-part-2

Мой опыт, когда я делал это в прошлом году, заключался в том, что Apple не предоставила никакой библиотеки для этого. Я закончил импорт библиотеки C с открытым исходным кодом (libHaru). Затем я добавил функцию для вывода в нее в каждом классе в моей иерархии представлений. Любое представление с subviews вызовет визуализацию на своих подзонах. Мои UILabels, UITextFields, UIImageViews, UISwitches и т. Д. Выведут их содержимое либо как текст, либо графику, соответственно, я также предоставил цвета фона для некоторых видов.

Это было не очень сложно, но libHaru дал мне некоторые проблемы с шрифтами, поэтому iirc I закончил использовать только шрифт и размер шрифта по умолчанию.

  • Проверьте, есть ли представление в представлении
  • Как масштабировать и вращать во время одиночного вызова animateWithDuration
  • Передача аргументов в селектор в Swift3
  • Компиляция Qt для iOS (маяк UIKit)
  • Какова связь между клипами UIViewToBounds и масками CALayerToBounds?
  • Пользовательский пейджинг UIScrollView с scrollViewWillEndDragging
  • Добавление подпрограмм поверх иерархии UIView с программным созданием
  • Когда / What / Why / Как использовать значение UIApplicationOptionsURLKey из launchOptions в приложении (приложение: willFinishLaunchingWithOptions :)?
  • Предполагаю ли я использовать свойство Image UIImageView, чтобы помочь сборщику мусора в Monotouch?
  • Как изменить цвет панели навигации в iOS 7?
  • Как смешивать Qt и собственные элементы пользовательского интерфейса iOS в одном приложении?
  • Interesting Posts

    загрузка изображения с использованием предварительно подписанного url в s3 всегда возвращает ошибку 403

    Iphone Facebook IOS Загрузка изображений, занимающих слишком много времени?

    WKInterfaceMap отключить триггер на родной карте Apple Watch

    '*** – : объект не может быть nil' при выполнении анимированной перезагрузки UITableView

    Как исправить UIPopoverController является устаревшим предупреждающим сообщением?

    Вкладки MKMapView с панелью навигации

    Как добавить UIView поверх MKAnnotationView, а затем отобразить его на MKMapView?

    Что такое UITableViewCell setIndexBarWidth

    Относительные ограничения автоматической компоновки в интерфейсе Builder

    Включить пользователей моего приложения для iOS для отправки в Craigslist

    раскадровка: представление таблицы за навигационной панелью

    Запуск разработки iPhone в Linux?

    Указывает ли Apple, какая версия SDK обязательна для использования в приложениях iOS?

    Как перезаписать или обновить UILocalNotification

    Как выполнить все активные действия в приложении iPad

    Давайте будем гением компьютера.