Başvurumda bir bayt akışı alacağım ve bunu telefon hafızasında bir pdf dosyasına dönüştüreceğim. Bunu bir pdf'ye nasıl dönüştürürüm? Ve bunu bir aktivitede mi göstermek?
Yanıtlar:
Bazı telefonlar (Nexus One gibi), önceden yüklenmiş bir Quickoffice sürümüyle gelir, bu nedenle, dosyayı SD karta kaydettikten sonra uygun Amacı göndermek kadar kolay olabilir.
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();
}
}
}
});
}
}
Pdf dosyasını web görünümünde açın .
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-Lollipop (api 21) yeni bir API sunar: PdfRenderer
Bu API, bir PDF belgesindeki bir sayfadan bir Bitmap oluşturmanıza olanak sağlar.
Kısaca:
pdf belgenizden aranabilir bir dosya tanımlayıcı alın:
ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
PdfRenderer'ı oluşturun
PdfRenderer renderer = new PdfRenderer(fd);
Bitmap'i hazırla
Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
işlemek için PdfRenderer.Page'i edinin
PdfRenderer.Page page = renderer.openPage(pageIndex);
sayfayı hazırlanmış bitmap üzerinde işle
page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
artık bitmap ile istediğinizi yapabilirsiniz.
2 boş bağımsız değişkenin, sayfanın bir bölümünü kırpmanıza ve klibin bir dönüşümünü ( Matrix kullanarak ) gerçekleştirmenize izin verebileceğini unutmayın.
başka bir oluşturma modu var: RENDER_MODE_FOR_PRINT . Bu moda ihtiyacınız varsa, onu doğru kullanmak için bazı yönergeler vardır: ayrıntılar burada .
Bu kitaplık basit ve iyi çalışıyor: Android Pdf Görüntüleyici https://github.com/barteksc/AndroidPdfViewer
Eski Cevap ...
Joan Zapata'nın bize daha iyi ve basit bir çözüm verdiğini düşünüyorum:
https://github.com/JoanZapata/android-pdfview
Sizi temin ederim ki işe yarıyor!
pdfView.fromAsset(pdfName)? Mutlak yolu kullanmayı denedim, ancak dosya bulunamadı (ve orada olduğundan eminim). Örnek: /data/data/package.name/files/images/filename.pdf
Yerel pdf dosyaları için, bunları üçüncü taraf kitaplıkları aracılığıyla işleyebilirsiniz. örneğin MuPDF kitaplığını kullanın desteklenen dosya türleri arasında PDF, PNG ve JPEG bulunur.
MuPDF'nin bir dezavantajı, hedefi gerçekleştirmek için yerel kitaplığı kullanmasıdır, bu nedenle uygulamayı daha sonra BlackBerry platformuna taşımak kolay olmayacaktır.
Bir bayt dizisinden bir pdf açmak için kullanabilirsiniz RadaeePDF, aktivitenize aşağıdakileri yapabilirsiniz:
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 );
}