अपने आवेदन में मैं एक बाइट स्ट्रीम प्राप्त करूंगा और इसे फोन मेमोरी में पीडीएफ फाइल में बदल दूंगा। मैं कैसे एक pdf करने के लिए प्रस्तुत करना है? और इसे एक गतिविधि पर दिखाएं?
जवाबों:
कुछ फोन (जैसे 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();
}
}
}
});
}
}
वेबव्यू में पीडीएफ फाइल खोलें ।
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);
}
}
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 । यदि आपको इस मोड की आवश्यकता है, तो इसे ठीक से उपयोग करने के लिए कुछ दिशानिर्देश हैं: यहां विवरण हैं ।
यह लाइब्रेरी सरल है और अच्छी तरह से काम करती है: Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer
पुराना जवाब ...
मुझे लगता है कि जोन ज़पाटा हमें बेहतर और सरल समाधान देते हैं:
https://github.com/JoanZapata/android-pdfview
मैं आपको विश्वास दिलाता हूं कि यह काम करता है!
pdfView.fromAsset(pdfName)
? मैंने निरपेक्ष पथ का उपयोग करने की कोशिश की, लेकिन फ़ाइल नहीं मिली (और मुझे यकीन है कि यह वहां है)। उदाहरण: /data/data/package.name/files/images/filename.pdf
स्थानीय पीडीएफ फाइलों के लिए, आप उन्हें तीसरे पक्ष के पुस्तकालयों के माध्यम से प्रस्तुत कर सकते हैं। उदाहरण के लिए, MuPDF लाइब्रेरी का उपयोग करें , इसके समर्थित फ़ाइल प्रकारों में पीडीएफ, पीएनजी और जेपीईजी शामिल हैं।
MuPDF की एक कमी यह है कि यह लक्ष्य पूरा करने के लिए देशी पुस्तकालय का उपयोग करता है, इसलिए बाद में ब्लैकबेरी प्लेटफॉर्म पर एप्लिकेशन को पोर्ट करना आसान नहीं होगा।
एक बाइट सरणी से एक पीडीएफ खोलने के लिए 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 );
}