本页内容
创建一个项目
Android
- 用 Flutter CLI 创建一个叫做 example 的 Flutter 项目:
bash
flutter create --org com.compdfkit.flutter example
- 在终端应用程序中,把当前的工作目录移动到您的项目中:
bash
cd example
- 打开 "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>
- 打开 App 的 Gradle 构建文件 "android/app/build.gradle" :
bash
open android/app/build.gradle
- 修改 App 最低支持的系统版本,这些操作都在 "android/app/build.gradle" 文件中的
android
部分里完成(如下所示):
diff
android {
defaultConfig {
- minSdkVersion flutter.minSdkVersion
+ minSdkVersion 21
...
}
}
- 打开 "pubspec.yaml" 文件,添加 ComPDFKit 插件。
diff
dependencies:
flutter:
sdk: flutter
+ compdfkit_flutter: ^1.13.0
- 在终端应用程序中,运行下面的命令以获取所有的包:
bash
flutter pub get
- 打开 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);
}
}
- 将您要在项目中显示的 PDF 文档添加到项目中:
创建一个 pdfs 目录:
bashmkdir pdfs
将您的示例文档复制到新创建的 pdfs 目录中,并将其命名为 PDF_Document.pdf。
- 在 "pubspec.yaml" 中指定 assets 目录:
diff
flutter:
+ assets:
+ - pdfs/
- 开始您的 Android 模拟器,或者连接一个设备。
- 运行这个 App:
bash
flutter run
iOS
- 用 Flutter CLI 创建一个叫做 example 的 Flutter 项目:
bash
flutter create --org com.compdfkit.flutter example
- 在终端应用程序中,把当前的工作目录移动到您的项目中:
bash
cd example
- 在 "pubspec.yaml" 中添加 ComPDFKit 依赖:
diff
dependencies:
flutter:
sdk: flutter
+ compdfkit_flutter: ^1.13.0
- 在终端应用程序中,运行下面的命令以获取所有的包:
bash
flutter pub get
- 在文本编辑器中打开您项目的 "Podfile" 文件:
bash
open ios/Podfile
- 更新平台为 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
- 转到 "example/ios" 文件夹并运行
pod install
命令:
bash
pod install
注意: 如果SSL网络请求在运行' pod install '时下载' ComPDFKit '库失败,您可以查看故障排除中的处理方法。
- 打开 “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);
}
}
- 将你想要在项目中显示的 PDF 文档添加到项目中。
创建一个 pdfs 目录:
bashmkdir pdfs
将您的示例文档复制到新创建的 pdfs 目录中,并将其命名为 PDF_Document.pdf。
- 在 "pubspec.yaml" 中指定 assets 目录:
diff
flutter:
+ assets:
+ - pdfs/
保护用户隐私:
为了保护用户隐私,在访问敏感的隐私数据之前,需要找到 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>
启用您的 iOS 模拟器,或者连接一个设备。
bash
flutter emulators --launch apple_ios_simulator
- 运行 App:
bash
flutter run