2012-09-23 25 views
7

मैं अपने आईओएस 6 ऐप में एक अच्छा दिखने वाला पीडीएफ जेनरेट करना चाहता हूं।मैं आईओएस पर "असली" टेक्स्ट सामग्री के साथ पीडीएफ कैसे उत्पन्न कर सकता हूं?

मैं कोशिश की है:

  • UIView संदर्भ
  • में प्रस्तुत करना CoreText
  • का उपयोग UILabel drawRect

यहाँ एक कोड उदाहरण का उपयोग कर रहा है NSString drawInRect

  • का उपयोग करना:

    -(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); 
    } 
    

    प्रदान किए गए UIViews में केवल UIImageView + UILabels का एक समूह होता है (कुछ के साथ और कुछ सीमाओं के बिना)। UILabel उपवर्गीकरण और यह कर:

    मैं भी एक सुझाव stackoverflow पर पाया की कोशिश की

    - (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]; 
    } 
    

    लेकिन है कि या तो कुछ भी नहीं बदला।

    कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, पूर्वावलोकन में पीडीएफ खोलते समय टेक्स्ट पार्ट्स ब्लॉक के रूप में चयन योग्य होते हैं, लेकिन चरित्र प्रति चरित्र नहीं, और पीडीएफ ज़ूम करने से पता चलता है कि यह वास्तव में एक बिटमैप छवि है।

    कोई सुझाव?

  • +0

    क्या आप नमूना कोड खंड और आउटपुट पीडीएफ फाइल पोस्ट कर सकते हैं ताकि मैं उन्हें देख सकूं? – iPDFdev

    +0

    क्या आपने कभी यह पता लगाया है? "ब्लॉक चयन" मुद्दे का अनुभव करना। – JeremyDay

    +0

    अब ऐसा नहीं लगता है: 'UIGraphicsBeginPDFContextToFile (outputPath, view.bounds, nil); UIGraphicsBeginPDFPage(); CGContextRef pdfContext = UIGraphicsGetCurrentContext(); [view.layer renderInContext: pdfContext]; UIGraphicsEndPDFContext(); ' – JeremyDay

    उत्तर

    2

    This Tutorial From Raywenderlich मेरा दिन बचाया। आशा है कि यह आपके लिए भी काम करेगा। http://www.raywenderlich.com/6818/how-to-create-a-pdf-with-quartz-2d-in-ios-5-tutorial-part-2

    +1

    मैं कुछ ऐसा करता हूं, और पीडीएफ ठीक दिखता है, लेकिन पाठ वास्तविक पाठ नहीं है, लेकिन एक प्रस्तुत छवि है। मैं चुनिंदा पाठ –

    +0

    के साथ एक पीडीएफ उत्पन्न करना चाहता हूं लेकिन मैंने उसी ट्यूटोरियल का उपयोग किया और इसके लिए ज़ूमिंग में भी मेरे लिए सही काम किया। –

    +0

    उसका मतलब चुनने योग्य है - जैसे मैक (कॉपी, पेस्ट इत्यादि) पर कर्सर के साथ –

    1

    मेरा अनुभव जब मैंने पिछले साल किया था तो यह था कि ऐप्पल ने ऐसा करने के लिए कोई पुस्तकालय प्रदान नहीं किया था। मैंने एक ओपन सोर्स सी लाइब्रेरी (libHaru) आयात करना समाप्त कर दिया। फिर मैंने अपने दृश्य पदानुक्रम में प्रत्येक वर्ग में इसे आउटपुट करने के लिए एक फ़ंक्शन जोड़ा। सबव्यूज़ के साथ कोई भी दृश्य इसके सबव्यूज़ पर प्रस्तुत करेगा। माई UILabels, UITextFields, UIImageViews, UISwitches इत्यादि उनकी सामग्री को टेक्स्ट या ग्राफिक्स के रूप में आउटपुट करेंगे, तदनुसार मैंने कुछ विचारों के लिए पृष्ठभूमि रंग भी प्रदान किए हैं।

    यह बहुत मुश्किल नहीं था, लेकिन libHaru ने मुझे फोंट के साथ कुछ समस्याएं दीं, इसलिए आईआईआरसी मैं सिर्फ डिफ़ॉल्ट फ़ॉन्ट और फ़ॉन्ट आकार का उपयोग कर समाप्त हुआ।

    +0

    मैं इसे देख लूंगा। धन्यवाद –