PDFTron Flutter 包装器

  • 一个有效的评估或许可证。如果您没有许可证密钥,请联系销售部门获取商业许可证密钥,或单击此处获取评估密钥。
  • PDFTron Gradle 凭证,随您的许可证密钥提供(Android)
  • PDFTron SDK >= 6.9.0
  • Flutter >= 1.0.0

预览

Android iOS
flutter-pdftron-demo-android flutter-pdftron-demo-ios

安装

完整的安装和 API 指南可在 https://www.pdftron.com/documentation/android/guides/flutter 找到

Android

  1. 首先,请遵循 Flutter 入门指南 安装设置编辑器,以及 创建 Flutter 项目。本指南的其余部分假定您的项目是通过运行 flutter create myapp 创建的。

  2. 将以下依赖项添加到您的 Flutter 项目的 myapp/pubspec.yaml

    dependencies:
       flutter:
         sdk: flutter
    +  pdftron_flutter:
    +    git:
    +      url: git://github.com/PDFTron/pdftron-flutter.git
    +  permission: 0.1.0
    
    
  3. 现在,将以下项添加到您的 myapp/android/app/build.gradle 文件中

    android {
    -   compileSdkVersion 27
    +   compileSdkVersion 28
    
        lintOptions {
    	disable 'InvalidPackage'
        }
    
        defaultConfig {
    	applicationId "com.example.myapp"
    -       minSdkVersion 16
    +       minSdkVersion 21
    -       targetSdkVersion 27
    +       targetSdkVersion 28
    +       multiDexEnabled true
    	versionCode flutterVersionCode.toInteger()
    	versionName flutterVersionName
    	testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    
    +   configurations.all {
    +       resolutionStrategy.force "com.android.support:appcompat-v7:28.0.0"
    +       resolutionStrategy.force "com.android.support:support-v4:28.0.0"
    +       resolutionStrategy.force "android.arch.lifecycle:runtime:1.0.3"
    +   }
    	...
    }
    
  4. 在您的 myapp\android\app\src\main\AndroidManifest.xml 文件中,将以下行添加到 <application> 标签内

    ...
    <application
    	android:name="io.flutter.app.FlutterApplication"
    	android:label="myapp"
    	android:icon="@mipmap/ic_launcher"
    +	android:largeHeap="true"
    +	android:usesCleartextTraffic="true">
      ...
    

    此外,在 <manifest> 标签中为您的应用程序添加必要的权限

    	...
    	<uses-permission android:name="android.permission.INTERNET" />
    	<!-- Required to read and write documents from device storage -->
    +	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    	<!-- Required if you want to record audio annotations -->
    +	<uses-permission android:name="android.permission.RECORD_AUDIO" />
    	...
    
  5. 将您的 PDFTron 凭证添加到 myapp/android/gradle.properties 文件中。

    org.gradle.jvmargs=-Xmx1536M
    
    AWS_ACCESS_KEY=YOUR_ACCESS_KEY_GOES_HERE
    AWS_SECRET_KEY=YOUR_SECRET_KEY_GOES_HERE
    
  6. lib/main.dart 替换为 此处 显示的内容

  7. 通过运行命令 flutter devices 检查您的 Android 设备是否正在运行。如果没有可用的设备,请按照您平台上的“安装”指南中的设备设置说明进行操作。

  8. 使用命令 flutter run 运行应用程序。

iOS

  1. 首先,请遵循官方入门指南 安装设置编辑器,以及 创建 Flutter 项目,以下步骤假定您的应用程序是通过 flutter create myapp 创建的

  2. 在文本编辑器中打开 myapp 文件夹。然后打开 myapp/pubspec.yaml 文件,添加

    dependencies:
       flutter:
         sdk: flutter
    +  pdftron_flutter:
    +    git:
    +      url: git://github.com/PDFTron/pdftron-flutter.git
    +  permission: 0.1.0
    
  3. 运行 flutter packages get

  4. 打开 myapp/ios/Podfile,添加

     # Uncomment this line to define a global platform for your project
    -# platform :ios, '9.0'
    +platform :ios, '9.3'
    ...
     target 'Runner' do
       ...
    +  # PDFTron Pods
    +  use_frameworks!
    +  pod 'PDFNet', podspec: 'POD_LINK_GOES_HERE'
     end
    
  5. 运行 flutter build ios --no-codesign 以确保集成过程成功

  6. lib/main.dart 替换为 此处 显示的内容

  7. 运行 flutter emulators --launch apple_ios_simulator

  8. 运行 flutter run

用法

打开 lib/main.dart,用以下内容替换整个文件

your_pdftron_license_key 字符串替换为您的许可证密钥

import 'dart:async';
import 'dart:io' show Platform;

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:pdftron_flutter/pdftron_flutter.dart';
import 'package:permission/permission.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _version = 'Unknown';
  String _document = "https://pdftron.s3.amazonaws.com/downloads/pdfref.pdf";

  @override
  void initState() {
    super.initState();
    initPlatformState();

    if (Platform.isIOS) {
      // Open the document for iOS, no need for permission
      PdftronFlutter.openDocument(_document);
    } else {
      // Request for permissions for android before opening document
      requestPermission();
    }
  }

  Future<void> requestPermission() async {
    final res = await Permission.requestSinglePermission(PermissionName.Storage);
    if (granted(res)) {
      PdftronFlutter.openDocument(_document);
    }
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String version;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      PdftronFlutter.initialize("your_pdftron_license_key");
      version = await PdftronFlutter.version;
    } on PlatformException {
      version = 'Failed to get platform version.';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _version = version;
    });
  }

  bool granted(PermissionStatus status) {
    return status == PermissionStatus.allow;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('PDFTron flutter app'),
        ),
        body: Center(
          child: Text('Running on: $_version\n'),
        ),
      ),
    );
  }
}

API

  • PdftronFlutter.version

获取 PDFTron SDK 版本

  • PdftronFlutter.initialize(String)

初始化 PDFTron SDK

  • PdftronFlutter.openDocument(String)

在查看器中打开文档

GitHub

https://github.com/PDFTron/pdftron-flutter