[英]How to render PDF in Android
在我的应用程序中,我将接收一个字节流并将其转换为手机内存中的 pdf 文件。 我如何将其呈现为pdf? 并在活动中展示它?
某些手机(如 Nexus One)预装了Quickoffice版本,因此一旦您将文件保存到 SD 卡,就可以像发送适当的 Intent 一样简单。
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-Lollipop (api 21) 引入了一个新的 API: PdfRenderer
此 API 允许您从 PDF 文档中的页面创建位图。
不久:
从您的 pdf 文档中获取可查找的文件描述符:
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 个空参数可能允许您剪辑页面中的某些部分并执行剪辑的转换(使用Matrix )
还有另一种渲染模式: RENDER_MODE_FOR_PRINT 。 如果您需要此模式,有一些正确使用它的指南:这里是详细信息。
这个库很简单而且运行良好: Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer
旧回复...
我认为 Joan Zapata 为我们提供了更好更简单的解决方案:
https://github.com/JoanZapata/android-pdfview
我向你保证它有效!
对于本地pdf文件,您可以通过第三方库进行渲染。 例如,使用MuPDF 库,其支持的文件类型包括 PDF、PNG 和 JPEG。
MuPDF 的一个缺点是它使用本机库来实现目标,因此以后将应用程序移植到黑莓平台上并不容易。
要从字节数组打开 pdf,您可以使用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 );
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.