2012-04-12 17 views
8

मेरे पास एक लंबा HTML पृष्ठ है और इसे एक बहुआयामी पीडीएफ फ़ाइल में परिवर्तित करना चाहता था।आईओएस - एचटीएमएल सामग्री से बहु पृष्ठ पीडीएफ बनाना

मैंने दिए गए स्ट्रिंग सामग्री के लिए apple और here - how to make multi page PDF में दिए गए निर्देशों का पालन किया है।

लेकिन एनएसएसटींग (कुछ डेटा के साथ) स्वरूपण एक HTML पृष्ठ बनाने से कठिन है। मैंने इस एचटीएमएल को बनाया है और इसे UIWebView में प्रदर्शित किया है।

अब मैं इस HTML से मल्टी पेज पीडीएफ फ़ाइल में एक पीडीएफ बनाना चाहता हूं।

मैं जिस कोड का उपयोग कर रहा हूं वह एकल पीडीएफ बना सकता है।

 
- (void)createPDFfromUIView:(UIWebView *)aView saveToDocumentsWithFileName:(NSString*)aFilename 
{ 
    // 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, aView.bounds, nil); 
    UIGraphicsBeginPDFPage(); 
    CGContextRef pdfContext = UIGraphicsGetCurrentContext(); 


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

    [aView.layer renderInContext:pdfContext]; 

    // 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:aFilename]; 

    // instructs the mutable data object to write its context to a file on disk 
    [pdfData writeToFile:documentDirectoryFilename atomically:YES]; 
    NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename); 
} 

क्या कोई भी कुछ मदद दे सकता है?

उत्तर

14

मैंने चारों ओर मिली हर अच्छी सलाह के आधार पर एक कक्षा बनाई। मैं बहुत खुदाई कर रहा हूं और मुझे आशा है कि मेरी कक्षा किसी भी एचटीएमएल स्रोत से सीधे बहु पृष्ठ पीडीएफ बनाने की कोशिश करने वाले किसी भी व्यक्ति के लिए कुछ अच्छी शुरुआत करेगी।

आप कुछ बुनियादी नमूना कोड के साथ यहाँ पूरे कोड मिल जाएगा: https://github.com/iclems/iOS-htmltopdf

मैं तुम्हें और मेरे आवश्यकताओं के रूप में सिर्फ एक ही मुद्दा था थे: - पूर्ण पीडीएफ (वास्तविक पाठ, कोई बिटमैप) - स्मार्ट बहु पृष्ठ (प्रत्येक एक्स पिक्सल की पूर्ण ऊंचाई वेबव्यू काटने की तुलना में ...)

इस प्रकार, मैं जिस समाधान का उपयोग करता हूं वह बहुत अच्छा है क्योंकि यह प्रिंट के लिए पृष्ठों को विभाजित करने के लिए आईओएस का उपयोग करता है।

मुझे समझाता हूँ, मैं सेटअप एक UIPrintPageRenderer वेब दृश्य प्रिंट फ़ॉर्मेटर (पहली टिप) के आधार पर:

UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init]; 

[render addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:0]; 

CGRect printableRect = CGRectMake(self.pageMargins.left, 
           self.pageMargins.top, 
           self.pageSize.width - self.pageMargins.left - self.pageMargins.right, 
           self.pageSize.height - self.pageMargins.top - self.pageMargins.bottom); 

CGRect paperRect = CGRectMake(0, 0, self.pageSize.width, self.pageSize.height); 

[render setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"]; 
[render setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"]; 

NSData *pdfData = [render printToPDF]; 

[pdfData writeToFile: self.PDFpath atomically: YES]; 

इस बीच, मैं UIPrintPageRenderer पर एक वर्ग बनाया है समर्थन करने के लिए:

-(NSData*) printToPDF 
{ 
    [self doNotRasterizeSubviews:self.view]; 

    NSMutableData *pdfData = [NSMutableData data]; 

    UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil); 

    [self prepareForDrawingPages: NSMakeRange(0, self.numberOfPages)]; 

    CGRect bounds = UIGraphicsGetPDFContextBounds(); 

    for (int i = 0 ; i < self.numberOfPages ; i++) 
    { 
     UIGraphicsBeginPDFPage(); 

     [self drawPageAtIndex: i inRect: bounds]; 
    } 

    UIGraphicsEndPDFContext(); 

    return pdfData; 
} 
+0

वेहरंग आप आदमी हैं। मैंने अभी नमूना ऐप और यह सब कुछ देखा जो मैं ढूंढ रहा था। लेकिन मेरी आवश्यकता बदल गई और कुछ और किया। लेकिन यह कमाल है। मैं भविष्य में इसका इस्तेमाल कर सकता हूं। प्रयास और विशेष रूप से चीजों को समझाते हुए धन्यवाद। – Viraj

+0

इस ढांचे के साथ समस्या यह है कि यह किसी भी टेक्स्ट बॉक्स में किसी भी डेटा को कैप्चर नहीं करेगा। वे सभी खाली हो जाएंगे। – GuybrushThreepwood

+0

यह बहुत अच्छा काम करता है !!! ज़बर्दस्त मर्द !!! – Rudi