Android显示PDF文件
最近由于项目需要,大致了解了一下关于如何在Android端显示PDF文件的内容,因此在这里进行一下小小的总结,方便今后开发。我目前了解到并成功实现的有三种开源框架分别是:Android PdfViewer、MUpdf以及iText,
-MUpdf
其中Android PdfViewer、MUpdf是显示PDF文件中所有文件,而iText则主要是方便用于解析PDF文件中的文本信息,这里主要介绍的是解析与写入PDF文本信息第三方开源框架iText的使用方法:
jar包及源码在文末:
直接将jar包拷入工程目录即可
添加完成后就可以直接使用了,下面直接给代码。
/**
* 读取Pdf文件的内容
* @param path :文件地址
*/
public String readPdfContent(String path){
String content = "";
File file = new File(path);
if (file.exists()){
try {
PdfReader pr = new PdfReader(path);
int page = pr.getNumberOfPages();
for(int i = 1 ;i<page+1;i++){
//遍历页码,读取Pdf文件内容
content += PdfTextExtractor.getTextFromPage(pr, i);
}
} catch (IOException e) {
e.printStackTrace();
}
}else {
Toast.makeText(MainActivity.this,"文件不存在!",Toast.LENGTH_SHORT).show();
}
return content;
}
/**
* 写入PDF内容
*/
public void writePdfContent(final String path, final String content){
//因为是耗时操作所以要在子线程中进行
new Thread(){
@Override
public void run() {
super.run();
Document doc = new Document();//创建一个document对象
FileOutputStream fos;
try {
fos = new FileOutputStream(new File(path)); //pdf_address为Pdf文件保存到sd卡的路径
PdfWriter.getInstance(doc, fos);
doc.open();
doc.setPageCount(1);
doc.add(new Paragraph(content, setChineseFont())); //result为保存的字符串 ,setChineseFont()为pdf字体
// 一定要记得关闭document对象
doc.close();
fos.flush();
fos.close();
handler.sendEmptyMessage(123);//操作完毕后进行提醒
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* 设置PDF字体(较为耗时)
*/
public Font setChineseFont() {
BaseFont bf = null;
Font fontChinese = null;
try {
// STSong-Light : Adobe的字体
// UniGB-UCS2-H : pdf 字体
bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.NOT_EMBEDDED);
fontChinese = new Font(bf, 12, Font.NORMAL);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fontChinese;
}
记得添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
如果系统是Android6.0版本以上的话不要忘了获取动态权限,附带获取动态权限代码:
参考文章:http://blog.csdn.net/xuwenneng/article/details/52995392
这里是我自己的源码下载地址: