快速实现自己的移动PDF阅读器-Android篇
来源:互联网 发布:海参真的有用吗 知乎 编辑:程序博客网 时间:2024/06/17 19:19
下面介绍如何用Foxit Mobile PDF SDK快速编写一个功能完整的Android Reader。
参考资料
官网资料
下载申请:https://www.foxitsoftware.com/products/sdk/register.php?product=MobilePDFSDK
产品介绍:https://www.foxitsoftware.com/products/mobile-pdf-sdk/
相关文档资料汇总地址:https://developers.foxitsoftware.com/sdk-docs/
API 手册:https://developers.foxitsoftware.com/resources/mobile-pdf-sdk/api_reference_android.html
Getting Start Guide:https://developers.foxitsoftware.com/kb/article/getting-started-guide-foxit-mobilepdf-sdk-android/
开发者手册:https://developers.foxitsoftware.com/kb/article/developer-guide-mobile-pdf-sdk-android/
本文涉及的Demo代码下载
开发步骤
第一步依然是创建功能和各种库的导入,具体的不多说了。
几句话总结下要点和我这里的Demo是怎么做的。
创建一个Empty Activity的Android 工程,这里工程名称暂定AmyTestRDK4,
接着我用最简单的办法导入库,把SDK包中的lib 文件夹除了uiextension_src外的文件都拷贝到 AmyTestRDK4/app/libs/ 的目录
接着设置build.gradle
App 的 build.gradle 设置
sourceSets { main { jniLibs.srcDirs = ['libs'] }}另外加入
repositories { flatDir { dirs 'libs' }}dependencies中加入:
compile(name: 'FoxitRDKUIExtensions', ext: 'aar')compile fileTree(dir: 'libs', include: ['*.jar'])还有需要加
compile 'com.android.support:recyclerview-v7:25.3.1'
完整的build.gradle文件如下:
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { applicationId "com.foxit.amy.amytestrdk4" minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ['libs'] } }} repositories { flatDir { dirs 'libs' }} dependencies { compile(name: 'FoxitRDKUIExtensions', ext: 'aar') compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12'}
接下来是库的初始化,设置UI 配置文件,并打开文档
private PDFViewCtrl pdfViewCtrl = null;private RelativeLayout parent = null;private UIExtensionsManager uiextensionsManager = null;private PDFReader defaultPDFReader = null;
pdfViewCtrl = new PDFViewCtrl(this.getApplicationContext());// Instantiate a PDFViewCtrl object// Get the config file, and set it to UIExtensionsManager.InputStream stream = this.getApplicationContext().getResources().openRawResource(R.raw.uiextensions_config);UIExtensionsManager.Config config = new UIExtensionsManager.Config(stream);uiextensionsManager = new UIExtensionsManager(this.getApplicationContext(), null,pdfViewCtrl, config);uiextensionsManager.setAttachedActivity(this);pdfViewCtrl.setUIExtensionsManager(uiextensionsManager);defaultPDFReader = (PDFReader) uiextensionsManager.getPDFReader();defaultPDFReader.onCreate(this,pdfViewCtrl, savedInstanceState);String path = "/mnt/sdcard/Download/JIRA.pdf";defaultPDFReader.openDocument(path, null);setContentView(defaultPDFReader.getContentView());
Activity中重载相应的事件
@Overrideprotected void onStart() { super.onStart(); if (defaultPDFReader == null) return; defaultPDFReader.onStart(this);}@Overrideprotected void onPause() { super.onPause(); if (defaultPDFReader == null) return; defaultPDFReader.onPause(this);} @Overrideprotected void onResume() { super.onResume(); if (defaultPDFReader == null) return; defaultPDFReader.onResume(this);} @Overrideprotected void onStop() { super.onStop(); if (defaultPDFReader == null) return; defaultPDFReader.onStop(this);} @Overrideprotected void onDestroy() { this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); if (defaultPDFReader != null) defaultPDFReader.onDestroy(this); super.onDestroy();} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (defaultPDFReader != null) defaultPDFReader.onActivityResult(this, requestCode, resultCode, data);} @Overridepublic void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (defaultPDFReader == null) return; ((MainFrame) defaultPDFReader.getMainFrame()).updateSettingBar(); defaultPDFReader.onConfigurationChanged(this, newConfig);} @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if (defaultPDFReader != null && defaultPDFReader.onKeyDown(this, keyCode, event)) return true; return super.onKeyDown(keyCode, event);} @Overridepublic boolean onPrepareOptionsMenu(Menu menu) { if (defaultPDFReader != null && !defaultPDFReader.onPrepareOptionsMenu(this, menu)) return false; return super.onPrepareOptionsMenu(menu);}
下面是完整的"MainActivity" 文件:
package com.foxit.amy.amytestrdk4; import android.content.Intent;import android.content.res.Configuration;import android.os.Bundle;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.view.KeyEvent;import android.view.Menu;import android.view.WindowManager;import android.widget.RelativeLayout; import com.foxit.sdk.PDFViewCtrl;import com.foxit.sdk.common.Library;import com.foxit.sdk.common.PDFException;import com.foxit.uiextensions.UIExtensionsManager;import com.foxit.uiextensions.pdfreader.impl.MainFrame;import com.foxit.uiextensions.pdfreader.impl.PDFReader; import java.io.InputStream; public class MainActivity extends AppCompatActivity { private String getStorageDirectory(){ String path = null; boolean sdExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); if (sdExist) { path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/"; } return path; } private PDFViewCtrl pdfViewCtrl = null; private RelativeLayout parent = null; private UIExtensionsManager uiextensionsManager = null; private PDFReader defaultPDFReader = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.loadLibrary("rdk"); String sn = ""; String key = ""; try { // initialize the library Library.init(sn, key); } catch (PDFException e) { e.printStackTrace(); return; } // Instantiate a PDFViewCtrl object pdfViewCtrl = new PDFViewCtrl(this.getApplicationContext()); //// Get the config file, and set it to UIExtensionsManager. InputStream stream = this.getApplicationContext().getResources().openRawResource(R.raw.uiextensions_config); UIExtensionsManager.Config config = new UIExtensionsManager.Config(stream); // Instantiate a UIExtensionsManager object and set it to PDFViewCtrl. uiextensionsManager = new UIExtensionsManager(this.getApplicationContext(), null, pdfViewCtrl, config); uiextensionsManager.setAttachedActivity(this); pdfViewCtrl.setUIExtensionsManager(uiextensionsManager); // Get current PDFReader, and set it to PDFViewCtrl. defaultPDFReader = (PDFReader) uiextensionsManager.getPDFReader(); defaultPDFReader.onCreate(this, pdfViewCtrl, savedInstanceState); // Load a document String sdcardPath = getStorageDirectory(); String path = sdcardPath + "FoxitSDK/Sample.pdf"; try { defaultPDFReader.openDocument(path, null); setContentView(defaultPDFReader.getContentView()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void onStart() { super.onStart(); if (defaultPDFReader == null) return; defaultPDFReader.onStart(this); } @Override protected void onPause() { super.onPause(); if (defaultPDFReader == null) return; defaultPDFReader.onPause(this); } @Override protected void onResume() { super.onResume(); if (defaultPDFReader == null) return; defaultPDFReader.onResume(this); } @Override protected void onStop() { super.onStop(); if (defaultPDFReader == null) return; defaultPDFReader.onStop(this); } @Override protected void onDestroy() { this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); if (defaultPDFReader != null) defaultPDFReader.onDestroy(this); super.onDestroy(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (defaultPDFReader != null) defaultPDFReader.onActivityResult(this, requestCode, resultCode, data); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (defaultPDFReader == null) return; ((MainFrame) defaultPDFReader.getMainFrame()).updateSettingBar(); defaultPDFReader.onConfigurationChanged(this, newConfig); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (defaultPDFReader != null && defaultPDFReader.onKeyDown(this, keyCode, event)) return true; return super.onKeyDown(keyCode, event); } @Override public boolean onPrepareOptionsMenu(Menu menu) { if (defaultPDFReader != null && !defaultPDFReader.onPrepareOptionsMenu(this, menu)) return false; return super.onPrepareOptionsMenu(menu); } }
示例代码工程下载:
链接 :http://pan.baidu.com/s/1slTqwNV 密码: t47p- 快速实现自己的移动PDF阅读器-Android篇
- 快速实现自己的移动PDF阅读器-iOS 篇
- 快速的PDF阅读器
- Foxit Mobile PDF SDK---让你分分钟实现一个自己的PDF阅读器
- android网络小说阅读器的实现
- pdf.js javascript实现pdf阅读器
- 一个小巧的PDF阅读器
- Linux 下的pdf阅读器
- linux下的pdf阅读器
- ubuntu下好用的pdf阅读器
- Ubuntu 下的PDF阅读器
- ubuntu下的PDF阅读器
- ubuntu 下的PDF阅读器
- Android快速SDK(12)文本pdf阅读器PdfViewer【傻瓜模式】
- android txt小说阅读器的实现
- Android电子书阅读器的设计与实现
- Html5添加移动触摸的网页版PDF格式文件阅读器插件教程
- android pdf 阅读器开发, pdf demo, pdf第三方控件
- 数据库应用中_你最看重哪一块的指标或功能?
- 谭八爷下单平台系统定制技术开发
- linux添加用户名和密码
- 决策树--从原理到实现
- Ubuntu 安装SSH Server 服务端口号22
- 快速实现自己的移动PDF阅读器-Android篇
- 备份表到存在的表或者自动新建表
- Android拷贝图片到指定路径
- javaseday33补充(伪元素)
- opencv 二值化处理
- Python超过R,成为数据科学和机器学习的最常用语言
- 最大连续子序列(hdoj1231)
- exit(0)与exit(1)、return的区别
- 十一、从头到尾解析Hash表算法