PDF के ड्राइंग के बारे में हाल ही में कई प्रश्न आए हैं।
हां, आप पीडीएफ को बहुत आसानी से प्रस्तुत कर सकते हैं UIWebView
लेकिन यह केंट प्रदर्शन और कार्यक्षमता दे सकता है जो आप एक अच्छे पीडीएफ दर्शक से उम्मीद करेंगे।
आप एक पीडीएफ पेज को एक काइलेयर या एक UIImage के लिए आकर्षित कर सकते हैं । Apple के पास नमूना कोड भी है कि जूमने योग्य UIScrollview में एक बड़ी पीडीएफ कैसे बनाएं
लेकिन वही मुद्दे सामने आते रहते हैं।
UIImage विधि:
- पीडीएफ एक
UIImage
वैकल्पिक पैमाने पर और साथ ही एक परत दृष्टिकोण में नहीं है। - सीपीयू और मेमोरी
UIImages
एकPDFcontext
सीमा से उत्पन्न होने पर हिट / नए ज़ूम-स्तरों के एक वास्तविक समय रेंडर बनाने के लिए इसका उपयोग करने से रोकता है।
CATiledLayer विधि:
- Theres एक महत्वपूर्ण ओवरहेड (समय) एक पूर्ण पीडीएफ पेज ड्राइंग करने के लिए एक
CALayer
: व्यक्तिगत टाइल्स प्रतिपादन देखा जा सकता है (यहां तक कि एक टाइल आकार ट्विस्ट के साथ) CALayers
खिचड़ी समय से पहले तैयार की जानी चाहिए (ऑफ-स्क्रीन प्रदान की गई)।
आम तौर पर पीडीएफ दर्शक मेमोरी पर भी भारी होते हैं। यहां तक कि ऐप्पल के ज़ूम करने योग्य पीडीएफ उदाहरण के मेमोरी उपयोग की निगरानी करें।
अपनी वर्तमान परियोजना में, मैं एक पीडीएफ दर्शक विकसित कर रहा हूं और UIImage
एक पृष्ठ को एक अलग थ्रेड में (यहां भी समस्याएँ!) प्रदान कर रहा हूं और इसे प्रस्तुत कर रहा हूं, जबकि स्केल ए 1 है। CATiledLayer
स्केल> 1 में एक बार प्रतिपादन kicks। iBooks एक समान दोहरा दृष्टिकोण लेता है जैसे कि आप उन पृष्ठों को स्क्रॉल करते हैं जिन्हें आप एक कुरकुरा संस्करण प्रकट होने से पहले पृष्ठ के निचले रेस संस्करण को एक सेकंड से भी कम समय के लिए देख सकते हैं।
Im पेज के प्रत्येक पक्ष पर ध्यान में रखते हुए 2 पृष्ठों का प्रतिपादन करता है, ताकि आरेखण शुरू होने से पहले पीडीएफ छवि परत को मुखौटा करने के लिए तैयार हो जाए। ध्यान केंद्रित पृष्ठ से +2 पृष्ठ दूर होने पर फिर से नष्ट हो जाते हैं।
क्या किसी के पास कोई अंतर्दृष्टि है, कोई बात नहीं, ड्राइंग पीडीएफ के प्रदर्शन / मेमोरी हैंडलिंग में सुधार करने के लिए कितना छोटा या स्पष्ट है? या किसी अन्य मुद्दे पर यहाँ चर्चा की?
संपादित करें: कुछ सुझाव (क्रेडिट- ल्यूक मैकने, वेड्समेड्ट, मैट गैलाघर, जोहान):
किसी भी मीडिया को डिस्क में सेव करें जब आप कर सकते हैं।
अगर टाइल वाले पर रेंडरिंग करते हैं तो बड़ी टाइल का उपयोग करें
init अक्सर प्लेसहोल्डर वस्तुओं के साथ इस्तेमाल किया सरणियों, alternitively एक और डिजाइन दृष्टिकोण है इस एक
ध्यान दें कि चित्र एक से अधिक तेजी से प्रस्तुत करना होगा
CGPDFPageRef
समय से पहले पृष्ठ तैयार करने के लिए
NSOperations
जीसीडी और ब्लाकों का उपयोग करें ।ड्राइंग करते समय मेमोरी का उपयोग कम करने
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
से पहले कॉल करेंCGContextDrawPDFPage
docRef के
NSOperations
साथ आपका init'ing करना एक बुरा विचार (मेमोरी) है, docRef को एक सिंगलटन में लपेटें।निरर्थक को रद्द करें
NSOperations
जब आप कर सकते हैं, खासकर यदि वे स्मृति का उपयोग कर रहे होंगे, तो संदर्भों को खुला छोड़ने से सावधान रहें!पृष्ठ ऑब्जेक्ट रीसायकल करें और अप्रयुक्त विचारों को नष्ट करें
जैसे ही आपको उनकी आवश्यकता नहीं है, किसी भी खुले संदर्भ को बंद करें
मेमोरी चेतावनियों को प्राप्त करने पर और डॉकर्फ और किसी भी पेज कैश को पुनः लोड करें
अन्य पीडीएफ विशेषताएं:
एक पीडीएफ के भीतर लिंक प्राप्त करना (और यहां और यहां )
लिंक का लक्ष्य प्राप्त करना (
/Dest
सरणी से पृष्ठ संख्या प्राप्त करना )
कच्चा पाठ प्राप्त करना (और यहाँ और यहाँ और यहाँ (स्थिति ध्यान केंद्रित))
खोज (और यहाँ ) (सभी पीडीएफ के साथ काम नहीं करता है (कुछ सिर्फ अजीब चरित्र दिखाते हैं, मुझे लगता है कि यह एक एन्कोडिंग मुद्दा है लेकिन मुझे यकीन नहीं है) -ट्रेडिट ब्रेनफेडर)
कैलेयर और ऑफ-स्क्रीन रेंडरिंग - तेज / चिकनी प्रदर्शन के लिए अगले पृष्ठ को प्रस्तुत करें
प्रलेखन
- क्वार्ट्ज PDFObjects (मेटा जानकारी, एनोटेशन, अंगूठे के लिए प्रयुक्त)
- Abobe पीडीएफ युक्ति
उदाहरण परियोजनाओं
- Apple / ZoomingPDF - ज़ूमिंग
UIScrollView
,,CATiledLayer
- vfr / रीडर - ज़ूमिंग, पेजिंग
UIScrollView
,CATiledView
- भौंह / पत्तियां - अच्छा संक्रमण के साथ पेजिंग
- / स्किम - यह सब कुछ लगता है (OSX के लिए पीडीएफ रीडर / संपादक)
PSPDFKit
, यह सस्ता नहीं है, लेकिन इसके लायक है: pspdfkit.com