2013-07-15 2 views
3

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

- (void)createPDFfromUIView:(UITextView*)view saveToDocumentsWithFileName:(NSString*)aFilename 
{ 

    NSMutableDictionary *myDictionary = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, 
              &kCFTypeDictionaryKeyCallBacks, 
              &kCFTypeDictionaryValueCallBacks)); 

    // Creates a mutable data object for updating with binary data, like a byte array 
    NSMutableData *pdfData = [NSMutableData data]; 

    // Points the pdf converter to the mutable data object and to the UIView to be converted 
    UIGraphicsBeginPDFContextToData(pdfData, textview.bounds, myDictionary); 
    UIGraphicsBeginPDFPage(); 

    CGContextRef pdfContext = UIGraphicsGetCurrentContext(); 


    // draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData 

    [textview.layer renderInContext:pdfContext]; // this line 

    // remove PDF rendering context 
    UIGraphicsEndPDFContext(); 

    // Retrieves the document directories from the iOS device 
    NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); 

    NSString* documentDirectory = [documentDirectories objectAtIndex:0]; 
    NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:@"filename"]; 

    // instructs the mutable data object to write its context to a file on disk 
    [pdfData writeToFile:documentDirectoryFilename atomically:YES]; 
} 

И называть его/сохранить его, я положил это сообщение в IBAction: [self createPDFfromUIView:textview saveToDocumentsWithFileName:@"pdflocation"];

Теперь я разбор через этот код и документы в течение нескольких часов, и не может понять, как создать PDF на основе сохраненного текстового файла, а не представления. Я все еще новичок в программировании, поэтому многое из этого происходит по моей голове. Кто-нибудь знает, как изменить приведенный выше код, чтобы он создавал PDF на основе сохраненного текста, а не вида?

Опции: Я мог бы создать PDF на основе вывода NSString. Я мог бы также выбросить сохраненный текст в UITextView и создать PDF на основе этого (первоначальный план). Однако я не знаю, как это сделать.

ответ

5

В этой статье от Apple объясняется, как создавать Pdf-файлы и нарисовать текст на страницах Pdf.

+0

спасибо. Я уже обращаюсь к этому документу уже несколько часов, но по какой-то причине он просто не щелкает. Вы знаете, есть ли какие-либо примеры, связанные с созданием PDF-файла из UITextView, сохраненного текста или строки? – John

+0

В листинге 4-2 представлен текст на странице с использованием как CoreText, так и класса NSString. Если у вас есть текст в объекте NSString, вы рисуете его на странице PDF с помощью метода drawInRect: withFont :. –

+0

Спасибо. Знаете ли вы, есть ли какие-либо рабочие примеры этого кода, плавающие вокруг? Я пойду дальше и отметю это правильно, даже если это пройдет над моей головой, я уверен, что это правильный ответ. – John

0

Для тех, кто еще ищет какой-то пример кода, это работает:

- (NSData *)createPDFforText: (NSString *)text 
{ 
    NSMutableData *pdfData = [NSMutableData data]; 
    NSMutableDictionary* attributes = [NSMutableDictionary dictionary]; 
    NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 

    UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil); 
    UIGraphicsBeginPDFPage(); 

    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
    paragraphStyle.alignment = NSTextAlignmentLeft; 

    [attributes setObject: paragraphStyle forKey: NSParagraphStyleAttributeName]; 
    [attributes setObject: [UIFont fontWithName: LATO_REGULAR size: 20.f] forKey: NSFontAttributeName]; 
    [attributes setObject: [UIColor blackColor] forKey: NSForegroundColorAttributeName]; 
    [text drawAtPoint: CGPointMake(20.f, 44.f) withAttributes: attributes]; 

    UIGraphicsEndPDFContext(); 

    return pdfData; 

}

Значение CGRectZero границы устанавливает PDF документ размером 8,5 страницы по умолчанию на 11 дюймов (612 на 792 точки).

Смежные вопросы