Android में PDF रेंडर कैसे करें


81

अपने आवेदन में मैं एक बाइट स्ट्रीम प्राप्त करूंगा और इसे फोन मेमोरी में पीडीएफ फाइल में बदल दूंगा। मैं कैसे एक pdf करने के लिए प्रस्तुत करना है? और इसे एक गतिविधि पर दिखाएं?


इसका उत्तर यहां दिया गया है: stackoverflow.com/a/16294833/2027232
निकोलस टायलर

जवाबों:


115

कुछ फोन (जैसे Nexus Nexus) पहले से इंस्टॉल किए गए क्विकऑफ़िस के एक संस्करण के साथ आते हैं, इसलिए एसडी कार्ड में फ़ाइल सहेजने के बाद उपयुक्त इंटेंट भेजना जितना आसान हो सकता है।

public class OpenPdf extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button) findViewById(R.id.OpenPdfButton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                File file = new File("/sdcard/example.pdf");

                if (file.exists()) {
                    Uri path = Uri.fromFile(file);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(path, "application/pdf");
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                    try {
                        startActivity(intent);
                    } 
                    catch (ActivityNotFoundException e) {
                        Toast.makeText(OpenPdf.this, 
                            "No Application Available to View PDF", 
                            Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}

1
हम्म बीमार इस कल की कोशिश करो। इसलिए बाइट धाराओं से मुझे एक फ़ाइल के रूप में उन्हें सहेजने की आवश्यकता होगी और फिर उस कोड को करने का प्रयास करें।
मिकी

18
हम्म कैसे अगर मैं अपने Android में QuickOffice स्थापित नहीं है के बारे में?
मिकी

2
इसलिए? क्या होगा अगर आपके पास क्विकऑफ़िस नहीं है?
नेक्रोनैट

अगर फोन में क्विक ऑफिस नहीं है तो?
टॉफिक अहमद

6
सर्वर से सीधे पीडीएफ फाइल कैसे खोलें? बल्कि इसे डिवाइस पर सहेजने और फिर खोलने पर।
EnthuDeveloper

16

वेबव्यू में पीडीएफ फाइल खोलें

public class MyPdfViewActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WebView mWebView=new WebView(MyPdfViewActivity.this);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setPluginsEnabled(true);
    mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+LinkTo);
    setContentView(mWebView);
  }
}

मुझे लगता है कि यह केवल Google व्यूअर लिंक के साथ काम करता है, क्योंकि यह केवल छवियों का कार्य करता है। अगर हम सीधे पीडीएफ का लिंक इस्तेमाल करते हैं, तो यह काम नहीं करेगा। क्या वो सही है ?
नाथन दो

यह केवल दूरस्थ लोगों के लिए स्थानीय फ़ाइलों के लिए काम नहीं करता है।
अल्फी हैनसेन

2
क्या होगा अगर लिंक बदल जाएगा?
शुहरत अकरमोव

3
"2 दिनों तक लगातार परीक्षण करने के बाद, मुझे Google डॉक्स पर यह कहते हुए एक त्रुटि मिली कि आप उन फ़ाइलों को देखने या डाउनलोड करने के लिए बैंडविड्थ सीमा तक पहुँच गए हैं जो Google डॉक्स प्रारूप में नहीं हैं ..... इसलिए यह विश्वसनीय नहीं लगता है।" stackoverflow.com/questions/2655972/…
वेडनी यूरी

9

Android- लॉलीपॉप (एपीआई 21) एक नया एपीआई पेश करता है: PdfRenderer

यह एपीआई आपको पीडीएफ दस्तावेज़ में एक पृष्ठ से एक बिटमैप बनाने की अनुमति देता है।

शीघ्र ही:

  • अपने पीडीएफ दस्तावेज़ से एक खोज योग्य फ़ाइल डिस्क्रिप्टर प्राप्त करें:

      ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
    
  • PdfRenderer बनाएँ

      PdfRenderer renderer = new PdfRenderer(fd);
    
  • बिटमैप तैयार करें

      Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
    
  • रेंडर करने के लिए PdfRenderer.Page प्राप्त करें

      PdfRenderer.Page page = renderer.openPage(pageIndex);
    
  • पृष्ठ को तैयार बिटमैप पर प्रस्तुत करें

      page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    
  • अब आप बिटमैप के साथ जो चाहें कर सकते हैं।

  • ध्यान दें कि 2 अशक्त आर्गन आपको पृष्ठ के कुछ भाग को क्लिप करने और क्लिप के रूपांतरण ( मैट्रिक्स का उपयोग करके ) करने की अनुमति दे सकते हैं

  • एक और रेंडरिंग मोड है: RENDER_MODE_FOR_PRINT । यदि आपको इस मोड की आवश्यकता है, तो इसे ठीक से उपयोग करने के लिए कुछ दिशानिर्देश हैं: यहां विवरण हैं


3
क्या फोन पर फाइल को सेव किए बिना इसे हासिल करने का कोई तरीका है? मुझे पीडीएफ को बायस्ट्रीम के रूप में मिल रहा है और मुझे इसे फोन पर सहेजे बिना उपयोगकर्ता को दिखाना होगा।
गोचन अरिंक

बाधा निर्माणकर्ता के लिए एक खोज योग्य फ़ाइल विवरणक पास करना है; और सॉकेट स्ट्रीम से fd खोजे जाने योग्य नहीं है। आप एक बफ़र में स्ट्रीम से सभी बाइट्स को संग्रहीत करने का प्रयास कर सकते हैं और उससे एक खोज योग्य fd प्राप्त कर सकते हैं।
--५

5

यह लाइब्रेरी सरल है और अच्छी तरह से काम करती है: Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer

पुराना जवाब ...

मुझे लगता है कि जोन ज़पाटा हमें बेहतर और सरल समाधान देते हैं:

https://github.com/JoanZapata/android-pdfview

मैं आपको विश्वास दिलाता हूं कि यह काम करता है!

1 : https://github.com/JoanZapata/android-pdfview


1
अलेक्स: आपने pdfName के लिए क्या प्रयोग किया pdfView.fromAsset(pdfName)? मैंने निरपेक्ष पथ का उपयोग करने की कोशिश की, लेकिन फ़ाइल नहीं मिली (और मुझे यकीन है कि यह वहां है)। उदाहरण: /data/data/package.name/files/images/filename.pdf
h-bomb

1
प्रिय @ h- बम, आपको अपने सिस्टम के एसेट फ़ॉडर में पीडीऍफ़ में होने पर आपको वास विधि का उपयोग करना होगा । डिवाइस से पीडीएफ़ लोड करने के लिए, आप फ़ाइलाइल विधि का उपयोग कर सकते हैं ।
अलेक्स

1
बहुत बहुत धन्यवाद। मैंने Android के FileProvider का उपयोग करने का फैसला किया और एक बाहरी ऐप को पीडीएफ खोलने की अनुमति दी। आश्चर्य की बात है, FileProvider देव डॉक में प्रलेखन और नमूना कोड उत्कृष्ट थे।
एच-बम

3

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

MuPDF की एक कमी यह है कि यह लक्ष्य पूरा करने के लिए देशी पुस्तकालय का उपयोग करता है, इसलिए बाद में ब्लैकबेरी प्लेटफॉर्म पर एप्लिकेशन को पोर्ट करना आसान नहीं होगा।


0

एक बाइट सरणी से एक पीडीएफ खोलने के लिए RadaeePDF, आप उपयोग कर सकते हैं , आप अपनी गतिविधि में निम्नलिखित कर सकते हैं:

private PDFReader m_vPDF = null;
private Document doc = new Document();

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    Global.Init(this);

    m_vPDF = new PDFReader(this);
    doc.Close();

    int ret = m_doc.OpenMem(data, password);
        switch( ret )
        {
            case -1://need input password
                finish();
                break;
            case -2://unknown encryption
                finish();
                break;
            case -3://damaged or invalid format
                finish();
                break;
            case -10://access denied or invalid file path
                finish();
                break;
            case 0://succeeded, and continue
                break;
            default://unknown error
                finish();
                break;
        }

    m_vPDF.open(doc);

    setContentView( m_vPDF );
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.