2011-12-14 13 views
47

मैं कुछ सामान है कि मेरे ऐप में पीडीएफ को पढ़ने के लिए सक्षम होना चाहिए पर काम कर रहा हूँ में MuPDF रीडर एकीकृत और मैं पीडीएफ दृश्य डाल करने के लिए मेरी कस्टम लेआउट में चाहते हैं। मैं एंड्रॉयड PDF व्यूअर पसंद किया था लेकिन जब मैं zoomin, Zoomout प्रदर्शन किया यह बहुत ज्यादा समय लेता है।कोई एप्लिकेशन

तो वर्तमान में मैं अपने प्रोजेक्ट में एकीकृत करने के लिए MuPDF ओपन सोर्स प्रोजेक्ट का उपयोग करना चाहिए, यह JNI पर आधारित है और मैं इसे करने के लिए इस्तेमाल नहीं कर रहा हूँ।

मैं देशी कोड के लिए पुस्तकालय बनाने के लिए साइगविन का उपयोग कर रहा हूं। इसलिए मैं कुछ चीजों के साथ स्पष्ट नहीं कर रहा हूँ:

  1. कैसे (के रूप में प्रति मेरे सवाल का शीर्षक) अपने प्रोजेक्ट में MuPDF एकीकृत करने के लिए?

  2. एक बार मैं फिर इसे एकीकृत कैसे मैं अपने कस्टम दृश्य में पीडीएफ रीडर डाल सकते हैं (एक्सएमएल में या programmaticaly) के लिए सफल होगा?

+8

विश्वास मुझे भाई अगर आप तो कम से कम एक व्यस्त के लिए तैयार हो जाओ एकीकृत करने के लिए जा रहे हैं सप्ताह – ingsaurabh

+0

@ingsaurabh :: ओह सच में? क्या आपने इसे लागू किया है? – dhams

+1

yup यह नहीं कि मैंने केवल हर पीडीएफ लाइब्रेरी पर काम किया है, लेकिन आप जो हासिल करना चाहते हैं उसे हासिल नहीं करेंगे और कोई दस्तावेज – ingsaurabh

उत्तर

47

मैं कैसे cygwin का उपयोग कर Windows में ऐसा करने के लिए पता नहीं है, क्योंकि मैं विकास के लिए Ubuntu का उपयोग कर रहा हूँ। लेकिन मुझे लगता है कि प्रक्रिया एक जैसी होनी चाहिए।

  1. यहाँ फ़ाइल mupdf-0.9-source.tar.gz डाउनलोड करें: http://code.google.com/p/mupdf/downloads/list?q=source
  2. फ़ाइल mupdf-thirdparty.zip
  3. डाउनलोड सूत्रों निकालें। डिफ़ॉल्ट रूप से वे फ़ोल्डर में निकाला जाएगा: mupdf-0,9/
  4. फ़ोल्डर में फ़ाइल mupdf-thirdparty.zip निकालें mupdf-0,9/
  5. परियोजना mupdf-0.9 (Windows के लिए आप इसे के रूप में वी.एस. का उपयोग करना चाहिए बिल्ड रीडमी फाइलों में घोषित किया जाता है)
  6. तब फ़ोल्डर में जा
  7. आप प्राप्त कर सकते हैं निम्न त्रुटियों mupdf-0.9/एंड्रॉयड/
  8. भागो NDK-निर्माण:

Compile thumb : mupdfthirdparty <= jbig2.c In file included from /home/yury/programming/android/workspace/mupdf-0.9/android/jni/../../thirdparty/jbig2dec/os_types.h:53, from /home/yury/programming/android/workspace/mupdf-0.9/android/jni/../../thirdparty/jbig2dec/jbig2.c:22: /home/yury/software/android-ndk-r6b/platforms/android-8/arch-arm/usr/include/stdint.h:48: error: redefinition of typedef 'int8_t' /home/yury/programming/android/workspace/mupdf-0.9/android/jni/../../thirdparty/jbig2dec/os_types.h:47: note: previous declaration of 'int8_t' was here

समाधान यहाँ समझाया गया है: mupdf for android: ndk-build problem (error: redefinition of typedef....) हालांकि, आप बस /thirdparty/jbig2dec/os_types.h

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

StaticLibrary : libmupdfthirdparty.a 
SharedLibrary : libmupdf.so 

यह पहला प्रश्न था। एंड्रॉइड/Readme.txt फ़ाइल में भी एक महान चरण-दर-चरण मार्गदर्शिका है।

अब दूसरे प्रश्न पर उत्तर। एंड्रॉइड के लिए आवेदन में आप परीक्षण परियोजना पा सकते हैं।

  • MuPDFActivity.java
  • MuPDFCore.java
  • PixmapView.java

सीधे शब्दों में अपनी परियोजना में पिछले दो फ़ाइलों की प्रतिलिपि: 3 फ़ाइलें हैं। और MuPDFActivity.java में एक उदाहरण देखें कि आप अपनी गतिविधि में mupdf लेआउट कैसे एम्बेड कर सकते हैं। इस फ़ाइल में यह किया गया है:

PixmapView pixmapView; 
//... 
layout = new RelativeLayout(this); 
//... 
    RelativeLayout.LayoutParams pixmapParams = 
         new RelativeLayout.LayoutParams(
           RelativeLayout.LayoutParams.FILL_PARENT, 
           RelativeLayout.LayoutParams.FILL_PARENT); 
    pixmapParams.addRule(RelativeLayout.ABOVE,100); 
    layout.addView(pixmapView, pixmapParams); 

    setContentView(layout); 
+0

हाँ, मैं इसका उल्लेख करना चाहता था लेकिन यह सवाल नहीं है) – Yury

+0

मैं भी एक ही कदम कर रहा हूं लेकिन संकलन के बाद मैं निम्नलिखित त्रुटि को चलाता हूं rtifex_mupdf_MuPDFCore_gotoPageInternal ': डी: /android-ndk-r8/mupdf-1.0- स्रोत/एंड्रॉइड // jni/mupdf.c: 102: त्रुटि: 'fz_matrix' अविकसित (पहले इस फ़ंक्शन में उपयोग करें) डी: /android-ndk-r8/mupdf-1.0-source/android//jni/mupdf। सी: 102: त्रुटि: अपेक्षित ';' डी: /android-ndk-r8/mupdf-1.0-source/android//jni/mupdf.c: 104: त्रुटि: अविकसित (पहले इस फ़ंक्शन में उपयोग करें) डी: /android-ndk-r8/mupdf-1.0 -सोर्स/एंड्रॉइड // jni/mupdf.c: 104: त्रुटि: 'dev' undecl .. और बहुत कुछ। क्या आप इस समस्या को हल करने में मेरी सहायता कर सकते हैं। –

+1

क्या आप एक अलग प्रश्न पूछ सकते हैं और वहां त्रुटियों का पूरा ढेर लगा सकते हैं? – Yury

5

चेक इस परियोजना eBookDroid

EBookDroid is an open source (GPL'ed) document viewer for Android based on the VuDroid code base.

Supported the file in following formats:

PDF 
DjVu 
XPS (OpenXPS) 
comics books (cbz,cbr) 
+0

जब मैं साइगविन का उपयोग कर lib फ़ाइल उत्पन्न करने का प्रयास कर रहा था, तो मुझे समय त्रुटि संकलित हो गई .. MyDirectory/EBookDroid/jni/djvu/JPEGDecoder.cpp: 73: 21: त्रुटि: jconfig.h: ऐसी कोई फ़ाइल या निर्देशिका – dhams

+0

आवश्यक नहीं है यदि यह फ़ाइल मौजूद है या बस एपीके डाउनलोड करें और उस – ingsaurabh

+0

@ingsaurabh के रूप में सरल से lib को निकालें तो सभी पथ समस्याएं स्रोत फ़ोल्डर में खोज करें, जो सभी पीडीएफ पुस्तकालयों में सबसे तेज़ और बेहतर लाइब्रेरी है? –

13

एंड्रॉइड एप्लिकेशन में पीडीएफ व्यूअर के लिए स्रोत कोड फ़ाइलों में से कुछ। लिंक की जाँच करें और यह प्रयास करें:

http://code.google.com/p/apv/source/browse/

http://code.google.com/p/android-pdf/

http://code.google.com/p/droidreader/

http://andpdf.sourceforge.net/

http://soft.udm4.com/downloading/pdf_viewer_open_source_code_in_android/ (मृत लिंक)

http://open-app.org/2011/02/pdf-viewer-a-simple-open-source-pdf-viewer-for-android/ (मृत लिंक)

http://androidunderground.blogspot.com/2011/08/pdf-viewer-has-colors-and-speed-but.html (मृत लिंक)

7

यह मैं पर मेरे मैक (2012, इंटेल i5) कैसे प्राप्त है:

चरण 1: जाओ mupdf-1.2-source.zip

चरण 2: जाओ android-ndk-mac-64

चरण 3: उन दोनों को नए फ़ोल्डर कॉल Android-pdf में अनजिप करें और mupdf और android-ndk पर अनजिप फ़ोल्डर का नाम बदलें (आप उन्हें जो भी चाहें उन्हें कॉल कर सकते हैं)

चरण 4: खुला टर्मिनल और उपयोग आदेश: cd जब तक आप android-pdf फ़ोल्डर में हैं

चरण 5: सीडी mupdf आदेश से: make (लगभग 40 सेकंड का समय लगेगा। सीडी android (mupdf निर्देशिका के भीतर)

चरण 7::

चरण 6 सभी स्क्रिप्ट को चलाने के लिए)। खुला खोजक Android-pdf कि आप टर्मिनल कमांड लाइन में से android-ndk खींचें फ़ाइल कॉल ndk-build बनाया फ़ोल्डर और प्रवेश करने के लिए जाना (मूल रूप से mupdf lib पर संचालित करने के लिए ndk-build का पथ जोड़ना।)

और कुछ सेकंड के बाद। आपके एंड्रॉइड प्रोजेक्ट में mupdf > android > libs > ... के अंदर आपके पास नया फ़ोल्डर होना चाहिए।

अपने मौजूदा ग्रहण परियोजना के साथ MuPDF उपयोग कैसे करें:

  1. कॉपी 'JNI' अपने मौजूदा ग्रहण परियोजना में/एंड्रॉयड फ़ोल्डर से फ़ोल्डर।
  2. /projectparty फ़ोल्डर को अपनी परियोजना में 'jni' फ़ोल्डर में कॉपी करें।
  3. अपनी परियोजना में 'jni' फ़ोल्डर में/cbz फ़ोल्डर की प्रतिलिपि बनाएँ।
  4. अपनी परियोजना में 'jni' फ़ोल्डर में फ़ोल्डर खींचें/ड्रा करें।
  5. /fitz फ़ोल्डर को अपनी परियोजना में 'jni' फ़ोल्डर में कॉपी करें।
  6. /प्रोजेक्ट फ़ोल्डर को अपनी परियोजना में 'jni' फ़ोल्डर में कॉपी करें।
  7. /पीडीएफ फ़ोल्डर को अपनी परियोजना में 'jni' फ़ोल्डर में कॉपी करें।
  8. /स्क्रिप्ट फ़ोल्डर को अपनी परियोजना में 'jni' फ़ोल्डर में कॉपी करें।
  9. /xps फ़ोल्डर को अपनी परियोजना में 'jni' फ़ोल्डर में कॉपी करें।
  10. 'jni' फ़ोल्डर के अंदर 'Android.mk' खोलें।
  11. बदलें

    MUPDF_ROOT: = ..

MUPDF_ROOT := $(TOP_LOCAL_PATH) 
  1. सहेजें 'Android.mk' के लिए।
  2. 'jni' फ़ोल्डर के अंदर 'Core.mk' खोलें।
  3. बदलें

    MY_ROOT: = ../ ..

को
MY_ROOT := $(LOCAL_PATH) 
  1. बदलें सभी

    ..

LOCAL_C_INCLUDES में

$(LOCAL_PATH) 
  1. सहेजें 'Core.mk' के लिए।
  2. 'jni' फ़ोल्डर के अंदर 'ThirdParty.mk' खोलें।
  3. MY_ROOT: = ../ ..

बदलें सभी

..

में

LOCAL_C_INCLUD को

MY_ROOT := $(LOCAL_PATH) 
  1. $(LOCAL_PATH) 
    
    1. सहेजें 'ThirdParty.mk' के लिए ES।
    2. अब अपनी परियोजना की 'jni' निर्देशिका में 'ndk-build' निष्पादित करें।
    3. /प्रोजेक्ट/src फ़ोल्डर में सब कुछ अपनी परियोजना में 'src' फ़ोल्डर में कॉपी करें।
    4. अपनी परियोजना में 'res/drawable' फ़ोल्डर में/android/res/drawable फ़ोल्डर में सबकुछ कॉपी करें।
    5. अपनी परियोजना में 'res/drawable-ldpi' फ़ोल्डर में/android/res/drawable-ldpi फ़ोल्डर में सबकुछ कॉपी करें।
    6. अपनी परियोजना में 'res/drawable-mdpi' फ़ोल्डर में/android/res/drawable-mdpi फ़ोल्डर में सबकुछ कॉपी करें।
    7. /android/res/लेआउट फ़ोल्डर में सब कुछ कॉपी करें EXCEPT main.xml (क्योंकि यदि आप किसी मौजूदा प्रोजेक्ट में प्रतिलिपि बना रहे हैं तो आपके पास पहले से ही अपना मुख्य.एक्सएमएल या समकक्ष होना चाहिए) 'res/layout' फ़ोल्डर में आपका प्रोजेक्ट।
    8. अपनी परियोजना में 'res/values' फ़ोल्डर में/android/res/values ​​फ़ोल्डर में सबकुछ कॉपी करें। यदि आपके पास पहले से मौजूद प्रोजेक्ट में 'स्ट्रिंग्स.एक्सएमएल' है, तो अपने प्रोजेक्ट के स्ट्रिंग्स.एक्सएमएल ('टैग्स के बीच पेस्ट) में अपने /android/res/values/strings.xml में टैग के बीच सबकुछ कॉपी करें। इसी प्रकार 'colors.xml' के साथ, यदि आपके पास पहले से मौजूद प्रोजेक्ट में 'color.xml' है, तो अपने प्रोजेक्ट के स्ट्रिंग्स.एक्सएमएल में अपने /android/res/values/strings.xml में टैग के बीच सबकुछ कॉपी करें। ('टैग के बीच पेस्ट करें)।
    9. प्रोजेक्ट में 'AndroidManifest.xml' खोलें।
    10. के बीच में '' टैग से

      /एंड्रॉयड फ़ोल्डर के अंदर AndroidManifest.xml, गतिविधियों के सभी सूची चस्पा आप AndroidManifest.xml के अपने काम की नकल mupdf अंदर से कॉपी चाहिए।

    11. एमयूपीडीएफ अब आपके मौजूदा ग्रहण परियोजना में। इसका उपयोग करने के लिए, अपने आवेदन में com.artifex.mupdf.ChoosePDFActivity.class पर कॉल करें। यह एमयूपीडीएफ के लिए मुख्य वर्ग है।

    12. उपसर्ग फ़ाइल के साथ पीडीएफ खोलने के लिए:

      उरी uri = Uri.parse ("पीडीएफ फ़ाइल का पथ");

      इरादा इरादा = नया इरादा (संदर्भ, MuPDFActivity.class);

      intent.setAction (Intent.ACTION_VIEW);

      intent.setData (uri);

      संदर्भ।startActivity (आशय);

    आशा इस मदद :)

+0

चरण 6: सीडी एंड्रॉइड (mupdf dir के भीतर।) -bash: cd: android: ऐसी कोई फ़ाइल या निर्देशिका – itsazzad

+2

@SazzadHossainKhan यह मंच/एंड्रॉइड अब – akauppi

0

मैं अपने आवेदन में दृश्य पेजर की है। मुझे पेजर देखने में प्रत्येक खंड पर पीडीएफ फाइलों को दिखाने की ज़रूरत है। mupdf से पीडीएफ दृश्य प्राप्त करने का कोई तरीका है? सामान्य रूप से हम mupdf

Uri uri = Uri.parse("path to pdf file"); 

Intent intent = new Intent(context, MuPDFActivity.class); 

intent.setAction(Intent.ACTION_VIEW); 

intent.setData(uri); 

context.startActivity(intent); 

तो नीचे के रूप में फोन करता है, तो मैं अपने अनुप्रयोग के लिए mupdf का उपयोग मैं प्रत्येक fragment.I पर MuPDFActivity इसकी नहीं एक सही लगता है जिस तरह से कॉल करने के लिए है?

0

star18bit द्वारा दिए गए उत्तर में काफी कुछ है, लेकिन यहां तक ​​कि यह भी अनुमोदित है कि मुझे कई मुद्दों का सामना करना पड़ा।

make कमांड की तरह मेरे लिए काम नहीं किया और मुझे इसे विजुअल स्टूडियो का उपयोग करके बनाना था। तो मैंने सभी प्री-रेक सॉफ्टवेयर सूचीबद्ध किए। एंट की तरह इसके अलावा हमें पीएटीएच में एसडीके फ़ोल्डर के tools और platform-tools फ़ोल्डरों को जोड़ने की आवश्यकता है।

इसके अलावा, मुझे Core2.mk फ़ाइल में परिवर्तन करना था, वही Core.mk में। मैं सभी जानकारी यहाँ नहीं दे सकते हैं, कारण यह एक बहुत है, इसलिए मैं पूरी जानकारी के लिए इस लिंक चर्चा करते हुए:

http://howtojava.net/tutorials/android/integrate-mupdf-with-android-in-windows-7

+2

है जबकि यह लिंक प्रश्न का उत्तर दे सकता है, यह आवश्यक भागों को शामिल करना बेहतर है यहां उत्तर का और संदर्भ के लिए लिंक प्रदान करें। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – Werner

+0

मैंने उत्तर में और जानकारी जोड़ दी है, और लिंक दिया क्योंकि मैं यहां सभी चरणों को नहीं लिख सकता। इसके अलावा यह विनम्र है कि किसी को सीधे इसे हटाने के बजाय अपनी टिप्पणी बदलने के लिए कहें। – nullpointer

+0

आपने एकाधिक (अपवित्र) उत्तरों के साथ 3-वर्षीय प्रश्न का उत्तर देने का प्रयास किया है। इसके अलावा आप कुछ हद तक जानकारी को किसी अन्य उत्तर में जोड़ रहे हैं। यह शायद पूर्ण उत्तर के बजाय टिप्पणी के रूप में बेहतर अनुकूल है। यह मेरी राय है ... अन्य अलग हो सकते हैं और यह भी ठीक है। – Werner

संबंधित मुद्दे