您的位置:首页 > 移动开发 > Android开发

Foxit Mobile PDF SDK for Android_渲染PDF文档(2)

2016-10-14 14:57 555 查看
前面一篇文章Foxit Mobile PDF SDK for Android_初始(1) 简单的了解了下Foxit这款全新的SDK,现在打算试试其据称没有PDF相关知识的攻城狮只用花几分钟以及几行代码就能实现一个PDF阅读器是不是真的!

下载地址再提下:http://www.foxitsdk.com/products/mobile-pdf-sdk/request-trial/ 需要申请下载,然后邮箱会收到下载链接。

PS: 入门阶段,加上是Android菜鸟,所以先阅读他们的文档作为学习,幸好他们的文档写得够详细,非常适合我这种小白菜鸟用户。我主要是看他们的developer_guide_android.pdf文档(在下载包的docs目录下)。

开发环境

Android Studio

我自己用的是Android Studio 2.1.1, 也恰好和文档中示例的开发环境一致。

准备工作:

1. 新建一个Android工程

打开Android Studio,点击“File -> New -> New Project…”, 然后填写工程名称, 这里我用RenderPDF, 如下所示。点击Next.



选择在”Phone and Tablet”上来跑该app. 最低的SDK版本选择:API 8: Android 2.2. 这样基本可以支持所有的android设备。点击Next.



为了简单起见,这里选择“Empty Activity”. 点击Next.



使用默认的Activity如下图所示:



2. 导入Foxit的SDK库

拷贝下载包中libs文件夹下的 FoxitRDKUIExtensions.aar文件和x86, arm64-v8a, armeabi-v7a文件夹到 ”RenderPDF\app\libs”.

PS: 这里我把三种架构的库都拷贝过去了,你也可以根据你使用的真机或者模拟器的架构选择对应的库。



拷贝到”RenderPDF\app\libs”目录下后,在Android Studio中,工程app\libs下面就可以看到它们了,如下图:



这里我们仅仅是把库放到了工程里面,并没有对库进行引用,那下面自然是要开始进行相关的配置工作了。打开app下面的“build.gradle”文件,进行如下操作:

a) 添加对”librdk.so”( x86/arm64-v8a/armeabi-v7a文件夹下的librdk.so)的引用:

android {

sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}


b) 添加对”FoxitRDKUIExtensions.aar”的引用

定义libs文件作为repository:

repositories {

flatDir {
dirs 'libs'
}
}


在dependencies中加入FoxitRDKUIExtensions.aar.

dependencies {

compile (name:'FoxitRDKUIExtensions', ext:'aar')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
}


这里附上整个“build.gradle”文件:

apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.foxit.test_android"
minSdkVersion 8
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
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')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
}


PS:这里按文档说的,设置compileSdkVersion和targetSdkVersion为API 23.

配置完“build.gradle”文件后,点击“Build -> Rebuild project”,然后在“\app\build\intermediates\explodedaar\FoxitRDKUIExtensions”下可以看到FoxitRDKUIExtensions.aar里面具体信息了,如下图:



至此,我们已经完成对Foxit SDK库的引用,写代码前的准备工作已经完成,下面要开始写代码了。

PS: 我们是要渲染显示一个PDF文档,因此需要事先将文档放到真机或者模拟器中。这里我还是用getting_started_android.pdf文档(太懒了,直接用现成的)。如果你不知道怎么添加文档,请参考第一篇Foxit Mobile PDF SDK for Android_初始(1)

3. 写代码:渲染显示PDF文档

真的只有几行代码就可以实现哦,接着往下看。

所有非界面的代码我都写在”RenderPDF\app\src\main\java\com\test\renderpdf\MainActivity.java”中。

首先,初始化SDK库

导入头文件:

import com.foxit.sdk.common.Library;
import com.foxit.sdk.common.PDFException;


添加初始化SDK库的代码:

System.loadLibrary("rdk");
try {
Library.init("sn", "key");

} catch (PDFException e) {
e.printStackTrace();
return;
}


sn和key是一串比较长的字符串,大家可以到libs目录下的rdk_sn.txt和rdk_key.txt文件中copy过来,或者从demo中copy。

在主界面上面添加PDFViewCtrl

在“app/src/main/res/layout/activity_main.xml”中添加如下代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.test.renderpdf.MainActivity">

<com.foxit.sdk.PDFViewCtrl
android:id="@+id/pdfviewer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical|horizontal"/>
</RelativeLayout>


加载文档以及渲染显示文档

在“MainActivity.java”中,实例化一个PDFDoc对象用来加载文档,然后实例化一个PDFViewCtrl对象用来显示加载的文档,代码如下:

PS: 官方文档中称将MainActivity从继承自AppCompatActivity改为FragmentActivity, 因为内置UI extensions组件中有用到FragmentActivity的特性。虽然这里还没有用到所谓的UI extensions组件,为了后面继续学习,这里就先改了哈。

package com.test.renderpdf;

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.foxit.sdk.common.Library; import com.foxit.sdk.common.PDFException;
import com.foxit.sdk.PDFViewCtrl;
import com.foxit.sdk.pdf.PDFDoc;

public class MainActivity extends FragmentActivity {

private PDFViewCtrl pdfViewCtrl = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

String sn = "Jm9uLlPzu31Xeg9DMkMCjTJ21fyDRcmmgsj6r1OpithuPTLmet8RLw==";
String key = "ezJvj90ntWp39JsXIV02hAneK+hiBbdSf8QJK/OtLsbugh81DetHZ2mytsJxCjTVbg84YCcakEMtqn5EtJylgi9le8qSQka+CDSUKaXx7mzfXeKeRXKUKWZo9YvjUdhJOZv4bEUVKon7M6A70Ewt+vi0EJCt8DruGsI5vzUdxjW335VDgrpdXP8WaXFHSunwmFerH/7lgYErxA/hpZK9keeo8lw/yWOVgnAByoIiaqaiQATSgyBMKRANkKp78H+oYWTdj7qNb5UNkq2sKordoCRjCmer5lSKOnEK5jPI7PETlNMi/vkWzSVndHCDNICQH7BaJWA+vwRJqW0E1m1vXXUizXeSuxmu3RtQk4QwYlgmE4cd6z2bl9RjLErHD2pi4y8je8opLN2Tziw+EgDhho1snyDbIWi3ynol2nv/1vt3x7CY7HpMZ1QrJNCv8z9OdGH0zc22RPU8hA47QE4ftH77kQvrjgWu1oZH07dseGrZxj5q+lvbMwZegKAHqXyzj7XDa7084FSQVRwE+vvA+0ZdjRCoJRf32RAmEbx4kF+cwIiDmQliFy+WphFmSKq8NYZA7c+pMRtWZaUHWk1hJ1XI7l175uQZb1WBNAIndRAXy5H3pettxGxIBrJqn4zfE7Kgyf5zvBWMr9+8KY0No1bRz5fHuds2XbiwzrVzV946uQJ1N+NPdX0Zy+u3LqXsskMXKBXseHQAO5g+b/ts4SXzLbSsHWPHCHGgv3wxH09+O2tQ3YH3sb48T6pbIj/oM6PzppRmC9YqIpfKpCZGvAcsYMU3sIHRmZOr5HxKC65VX3oX2CMlTXXJHH0wf9wFqIyxUGwFWL3EvsBo5UR282KDyquz74xgvyhM1F3FZQxD4UJgZBDJvr/mrpziFF3sUuXCjpCwDT2gC25VSng9sm2w5FIh7MjJsRlK+hPCn5tuYZcKzMJHQG9deNA5YwN6/f/KLlhxEJpzeWyiNA2PoV2CDt1hYLJeob+VVtirRNsZI447ym2hCBkjdd7uru3LweWVpPzWTdP3/2a7JkuGPJbhIKYu6LsK5I6ghCfE0vvPR3Ne+aHk97+ytZRJHI8RDGujE5yQ0BIrP0u9ZuTQvPq8xSGJFWHDLsVgxMG0b2I+6jnSBoUo/cJDFT/dNID1anbesGHL73waVHDN0U5cR34Ry97dSBjoD6wgF8UR8roPmbEYNp7GVRrSbenJHQ==";

// Load "librdk.so" library.
System.loadLibrary("rdk");
try {
// initialize the library
Library.init(sn, key);
} catch (PDFException e) {
e.printStackTrace();
return;
}

// Inflate the view and get a reference to PDFViewCtrl
setContentView(R.layout.activity_main);
pdfViewCtrl = (PDFViewCtrl) findViewById(R.id.pdfviewer);

// Load a document
String path = "/mnt/sdcard/getting_started_android.pdf";
try {
PDFDoc document = PDFDoc.createFromFilePath(path);
document.load(null);
pdfViewCtrl.setDoc(document);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
protected void onDestroy() {
super.onDestroy();
try {
Library.release();
} catch (PDFException e) {
e.printStackTrace();
}
}

@Override
protected void onResume() {
super.onResume();
if(pdfViewCtrl != null)
pdfViewCtrl.requestLayout();
}
}


就这些代码就可以完成渲染一个PDF文档,核心代码加起来还不到10行,好像是挺酷的哦。跑起来看看效果。

PS: 因为要读取真机或者模拟器中的文档,所以要在“app/src/main/ AndroidManifest.xml”中设置用户权限,允许用户读写sdcard. 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.renderpdf">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


其实是只用添加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


这一句,为了方便阅读,我都是把整个代码都贴出来。

4. Run the app:

我用Android 4.4.2 (API 19) x86架构的模拟器来跑该app, 运行起来后如下图:



这几行代码就可以实现一个简单的PDF阅读器了,还自带有缩放和翻页功能:





上面已经成功实现了渲染显示PDF文档的功能,真的只花了几行代码,大伙感兴趣的可以试试。有一点大家要注意下,我这里用的是API 19的模拟器来运行该app, 如果大家用API 23以上(包括23)的话,如果想读取sdcard中的文档,要么需要添加代码进行动态权限获取,要么可以把“app/build.gradle”下的targetSdkVersion 改为低于23的版本即可。

好了,今天就到这里吧,后面将继续学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mobile pdf sdk android