iPhone PDF библиотека для создания или функции - PullRequest
2 голосов
/ 12 июля 2010

Кто-нибудь знает о проекте создания PDF с открытым исходным кодом для iPhone для создания документов из шаблона (с использованием Quartz)? Или есть какие-то функции, которые люди написали для выравнивания и т. Д.? Я видел libHaru, но я понимаю, что ему не хватает некоторых важных функций.

Спасибо

Ответы [ 2 ]

1 голос
/ 12 июля 2010

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

NSMutableData *pdfData = [[NSMutableData alloc] init];
CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)pdfData);
const CGRect mediaBox = CGRectMake(0.0f, 0.0f, drawingWidth, drawingHeight);
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &mediaBox, NULL);

UIGraphicsPushContext(pdfContext);
CGContextBeginPage(pdfContext, &mediaBox);

// Draw your content here

CGContextEndPage(pdfContext);   
CGPDFContextClose(pdfContext);
UIGraphicsPopContext();

CGContextRelease(pdfContext);
CGDataConsumerRelease(dataConsumer);

Здесь происходит несколько вещей.Сначала мы создаем экземпляр NSMutableData и устанавливаем его в качестве потребителя данных (место назначения для контекста PDF для записи).Поскольку Core Graphics использует типы Core Foundation, а не классы Какао, CGDataConsumerCreateWithCFData() требует аргумент CFMutableDataRef.Мы можем просто привести класс NSMutableData, который мы создали как этот тип, потому что NSData является бесплатным мостовым классом.Это означает, что его можно использовать в методах Какао или в функциях Core Foundation без преобразования между типами.

После этого мы устанавливаем размер страницы контекста PDF (в пунктах) и создаем контекст PDF,используя потребителя данных, который мы создали ранее.Затем мы делаем это активным контекстом для рисования, используя UIGraphicsPushContext().

. В этом случае мы создаем только одну страницу в PDF-файле, который мы рисуем, поэтому мы начинаем страницу, рисуем, затем заканчиваемстраница.Если вы хотите сделать несколько страниц, вы можете повторить это для каждой страницы.

Обратите внимание, что весь этот рисунок будет выполнен в координатном пространстве Кварца, поэтому, если вы настроили свои процедуры рисования для правильного отображенияв представлении iPhone это будет перевернуто здесь.Чтобы противодействовать этому переключению, вы можете поместить следующее в свой чертежный код (после UIGraphicsPushContext()):

CGContextTranslateCTM(context, 0.0f, self.frame.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);
0 голосов
/ 19 декабря 2011

Существует 2 способа создания PDF в iPhone SDK. Первый использует методы Core Graphics:

  1. CGContextRef CGPDFContextCreateWithURL (CFURLRef url, const CGRect * mediaBox, CFDictionaryRef вспомогательныйInfo)
  2. void CGContextBeginPage (CGContextRef c, const CGRect * mediaBox)
  3. void CGContextEndPage (CGContextRef c) Второй способ - использовать методы UIKit для создания контекста PDF. Вы можете найти это здесь .

Существует хорошее руководство по программному созданию PDF-файла с помощью iPhone SDK, и вы можете найти его здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...