Skip to content

创建一个项目

Android

  1. 用 Flutter CLI 创建一个叫做 example 的 Flutter 项目:
bash
flutter create --org com.compdfkit.flutter example
  1. 在终端应用程序中,把当前的工作目录移动到您的项目中:
bash
cd example
  1. 打开 "example/android/app/src/main/AndroidManifest.xml" 文件,添加网络、存储权限。
diff
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.compdfkit.flutter.example">
    
    <!-- 在线认证License需要使用网络权限! -->
+    <uses-permission android:name="android.permission.INTERNET"/>
  
    <!-- Required to read and write documents from device storage -->
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

		<application
+      android:requestLegacyExternalStorage="true">
      
    </application>   
</manifest>
  1. 打开 App 的 Gradle 构建文件 "android/app/build.gradle"
bash
open android/app/build.gradle
  1. 修改 App 最低支持的系统版本,这些操作都在 "android/app/build.gradle" 文件中的 android 部分里完成(如下所示):
diff
 android {
     defaultConfig {
-        minSdkVersion flutter.minSdkVersion
+        minSdkVersion 21
         ...
     }
 }
  1. 打开 "pubspec.yaml" 文件,添加 ComPDFKit 插件。
diff
 dependencies:
   flutter:
     sdk: flutter
+  compdfkit_flutter: ^1.13.0
  1. 在终端应用程序中,运行下面的命令以获取所有的包:
bash
flutter pub get
  1. 打开 lib/main.dart,并将整个内容替换为以下代码。然后在ComPDFKit.init方法中填入您的许可证。这个示例将展示从本地设备中加载一个 PDF 文档。
dart
import 'dart:io';

import 'package:compdfkit_flutter/compdfkit.dart';
import 'package:compdfkit_flutter/cpdf_configuration.dart';

import 'package:flutter/material.dart';

const String DOCUMENT_PATH = 'pdfs/PDF_Document.pdf';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    _init();
  }

  void _init() async {
    /// 请替换您的ComPDFKit许可证密钥。
    ComPDFKit.initialize(androidOnlineLicense : 'your compdfkit key', iosOnlineLicense : 'your compdfkit key');
  
    /// 如果您使用的是离线认证许可证,请使用以下方法初始化SDK
    /// ComPDFKit.init('your compdfkit key');
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          body: SafeArea(
              child: Center(
        child: ElevatedButton(
            onPressed: () async {
              showDocument(context);
            },
            child: const Text(
              'Open Document',
              style: TextStyle(color: Colors.white),
            )),
      ))),
    );
  }

  void showDocument(BuildContext context) async {
    final bytes = await DefaultAssetBundle.of(context).load(DOCUMENT_PATH);
    final list = bytes.buffer.asUint8List();
    final tempDir = await ComPDFKit.getTemporaryDirectory();
    var pdfsDir = Directory('${tempDir.path}/pdfs');
    pdfsDir.createSync(recursive: true);

    final tempDocumentPath = '${tempDir.path}/$DOCUMENT_PATH';
    final file = File(tempDocumentPath);
    if (!file.existsSync()) {
      file.create(recursive: true);
      file.writeAsBytesSync(list);
    }
    var configuration = CPDFConfiguration();
    // 如何开启与禁用功能:
    // 设置打开时默认显示模式:
    //      configuration.modeConfig = const ModeConfig(initialViewMode: CPreviewMode.annotations);
    // 顶部工具栏配置:
    // android:
    //      configuration.toolbarConfig = const ToolbarConfig(androidAvailableActions: [
    //           ToolbarAction.thumbnail, ToolbarAction.bota, 
    //           ToolbarAction.search, ToolbarAction.menu
    //      ],
    //      availableMenus: [
    //        ToolbarMenuAction.viewSettings, ToolbarMenuAction.documentInfo, ToolbarMenuAction.security,
    //      ]);
    // iOS:
    //      configuration.toolbarConfig = const ToolbarConfig(
    //			//ios 顶部工具栏左侧按钮
    //			iosLeftBarAvailableActions: [
    //          ToolbarAction.back, ToolbarAction.thumbnail
    //      ],
    //			ios 顶部工具栏右侧按钮
    //      iosRightBarAvailableActions: [
    //        ToolbarAction.bota, ToolbarAction.search, ToolbarAction.menu
    //      ],
    //      availableMenus: [
    //        ToolbarMenuAction.viewSettings, ToolbarMenuAction.documentInfo, ToolbarMenuAction.security,
    //      ]);
    // 阅读界面设置:
    //      configuration.readerViewConfig = const ReaderViewConfig(linkHighlight: true, formFieldHighlight: true);
    ComPDFKit.openDocument(tempDocumentPath,
        password: '', configuration: configuration);
  }
}
  1. 将您要在项目中显示的 PDF 文档添加到项目中:
  • 创建一个 pdfs 目录:

    bash
    mkdir pdfs
  • 将您的示例文档复制到新创建的 pdfs 目录中,并将其命名为 PDF_Document.pdf

  1. "pubspec.yaml" 中指定 assets 目录:
diff
 flutter:
+  assets:
+    - pdfs/
  1. 开始您的 Android 模拟器,或者连接一个设备。
  2. 运行这个 App:
bash
flutter run

iOS

  1. 用 Flutter CLI 创建一个叫做 example 的 Flutter 项目:
bash
flutter create --org com.compdfkit.flutter example
  1. 在终端应用程序中,把当前的工作目录移动到您的项目中:
bash
cd example
  1. "pubspec.yaml" 中添加 ComPDFKit 依赖:
diff
 dependencies:
   flutter:
     sdk: flutter
+  compdfkit_flutter: ^1.13.0
  1. 在终端应用程序中,运行下面的命令以获取所有的包:
bash
flutter pub get
  1. 在文本编辑器中打开您项目的 "Podfile" 文件:
bash
open ios/Podfile
  1. 更新平台为 iOS 11 并添加 "compdfkit_flutter.podspec"
diff
- platform :ios, '9.0'
+ platform :ios, '11.0' 
 ...
 target 'Runner' do
   use_frameworks!
   use_modular_headers!`

   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
+  pod 'ComPDFKit_Tools', podspec:'https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit_tools/1.13.0.podspec'
+  pod 'ComPDFKit', podspec:'https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit/1.13.0.podspec'

 end
  1. 转到 "example/ios" 文件夹并运行 pod install命令:
bash
pod install

注意: 如果SSL网络请求在运行' pod install '时下载' ComPDFKit '库失败,您可以查看故障排除中的处理方法。

  1. 打开 “lib/main.dart” 文件并将其全部内容替换为以下代码。并在 ComPDFKit.init 方法中填写 ComPDFKit 给您的许可证密钥。这个简单的示例将从本地设备中加载一个 PDF 文件。
dart
import 'dart:io';

import 'package:compdfkit_flutter/compdfkit.dart';
import 'package:compdfkit_flutter/cpdf_configuration.dart';

import 'package:flutter/material.dart';

const String DOCUMENT_PATH = 'pdfs/PDF_Document.pdf';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    _init();
  }

  void _init() async {
    /// 请替换您的ComPDFKit许可证密钥。
    ComPDFKit.initialize(androidOnlineLicense : 'your compdfkit key', iosOnlineLicense : 'your compdfkit key');
  
    /// 如果您使用的是离线认证许可证,请使用以下方法初始化SDK
    /// ComPDFKit.init('your compdfkit key');
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          body: SafeArea(
              child: Center(
        child: ElevatedButton(
            onPressed: () async {
              showDocument(context);
            },
            child: const Text(
              'Open Document',
              style: TextStyle(color: Colors.white),
            )),
      ))),
    );
  }

  void showDocument(BuildContext context) async {
    final bytes = await DefaultAssetBundle.of(context).load(DOCUMENT_PATH);
    final list = bytes.buffer.asUint8List();
    final tempDir = await ComPDFKit.getTemporaryDirectory();
    var pdfsDir = Directory('${tempDir.path}/pdfs');
    pdfsDir.createSync(recursive: true);

    final tempDocumentPath = '${tempDir.path}/$DOCUMENT_PATH';
    final file = File(tempDocumentPath);
    if (!file.existsSync()) {
      file.create(recursive: true);
      file.writeAsBytesSync(list);
    }
    var configuration = CPDFConfiguration();
    // 如何开启与禁用功能:
    // 设置打开时默认显示模式:
    //      configuration.modeConfig = const ModeConfig(initialViewMode: CPreviewMode.annotations);
    // 顶部工具栏配置:
    // android:
    //      configuration.toolbarConfig = const ToolbarConfig(androidAvailableActions: [
    //           ToolbarAction.thumbnail, ToolbarAction.bota, 
    //           ToolbarAction.search, ToolbarAction.menu
    //      ],
    //      availableMenus: [
    //        ToolbarMenuAction.viewSettings, ToolbarMenuAction.documentInfo, ToolbarMenuAction.security,
    //      ]);
    // iOS:
    //      configuration.toolbarConfig = const ToolbarConfig(
    //			//ios 顶部工具栏左侧按钮
    //			iosLeftBarAvailableActions: [
    //          ToolbarAction.back, ToolbarAction.thumbnail
    //      ],
    //			//ios 顶部工具栏右侧按钮
    //      iosRightBarAvailableActions: [
    //        ToolbarAction.bota, ToolbarAction.search, ToolbarAction.menu
    //      ],
    //      availableMenus: [
    //        ToolbarMenuAction.viewSettings, ToolbarMenuAction.documentInfo, ToolbarMenuAction.security,
    //      ]);
    // 阅读界面设置:
    //      configuration.readerViewConfig = const ReaderViewConfig(linkHighlight: true, formFieldHighlight: true);
    ComPDFKit.openDocument(tempDocumentPath,
        password: '', configuration: configuration);
  }
}
  1. 将你想要在项目中显示的 PDF 文档添加到项目中。
  • 创建一个 pdfs 目录:

    bash
    mkdir pdfs
  • 将您的示例文档复制到新创建的 pdfs 目录中,并将其命名为 PDF_Document.pdf

  1. "pubspec.yaml" 中指定 assets 目录:
diff
 flutter:
+  assets:
+    - pdfs/
  1. 保护用户隐私:

    为了保护用户隐私,在访问敏感的隐私数据之前,需要找到 iOS 10.0 或更高版本 iOS 项目中的 "Info" 配置,并按照下图所示配置相关隐私条款。

    objective-c
    <key>NSCameraUsageDescription</key>
    <string>Your consent is required before you could access the function.</string>
    
    <key>NSMicrophoneUsageDescription</key>
    <string>Your consent is required before you could access the function.</string>
    
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>Your consent is required before you could access the function.</string>
    
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Your consent is required before you could access the function.</string>
     
    <key>NSAppTransportSecurity</key>
    	<dict>
    		<key>NSAllowsArbitraryLoads</key>
    		<true/>
    	</dict>
  2. 启用您的 iOS 模拟器,或者连接一个设备。

bash
flutter emulators --launch apple_ios_simulator
  1. 运行 App:
bash
flutter run