cpdf_reader_widget_security_example.dart 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. // Copyright © 2014-2025 PDF Technologies, Inc. All Rights Reserved.
  2. //
  3. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  4. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  5. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  6. // This notice may not be removed from this file.
  7. import 'dart:io';
  8. import 'package:compdfkit_flutter/configuration/cpdf_configuration.dart';
  9. import 'package:compdfkit_flutter/configuration/cpdf_options.dart';
  10. import 'package:compdfkit_flutter/document/cpdf_watermark.dart';
  11. import 'package:compdfkit_flutter/widgets/cpdf_reader_widget.dart';
  12. import 'package:compdfkit_flutter/widgets/cpdf_reader_widget_controller.dart';
  13. import 'package:compdfkit_flutter_example/utils/file_util.dart';
  14. import 'package:file_picker/file_picker.dart';
  15. import 'package:flutter/material.dart';
  16. class CPDFReaderWidgetSecurityExample extends StatefulWidget {
  17. final String documentPath;
  18. const CPDFReaderWidgetSecurityExample(
  19. {super.key, required this.documentPath});
  20. @override
  21. State<CPDFReaderWidgetSecurityExample> createState() =>
  22. _CPDFReaderWidgetSecurityExampleState();
  23. }
  24. class _CPDFReaderWidgetSecurityExampleState
  25. extends State<CPDFReaderWidgetSecurityExample> {
  26. CPDFReaderWidgetController? _controller;
  27. @override
  28. Widget build(BuildContext context) {
  29. return Scaffold(
  30. resizeToAvoidBottomInset: false,
  31. appBar: AppBar(
  32. title: const Text('CPDFReaderWidget Example'),
  33. leading: IconButton(
  34. onPressed: () {
  35. Navigator.pop(context);
  36. },
  37. icon: const Icon(Icons.arrow_back)),
  38. actions: null == _controller ? null : _buildAppBarActions(context),
  39. ),
  40. body: CPDFReaderWidget(
  41. document: widget.documentPath,
  42. configuration: CPDFConfiguration(
  43. toolbarConfig: const CPDFToolbarConfig(
  44. iosLeftBarAvailableActions: [CPDFToolbarAction.thumbnail])),
  45. onCreated: (controller) {
  46. setState(() {
  47. _controller = controller;
  48. });
  49. },
  50. ));
  51. }
  52. List<Widget> _buildAppBarActions(BuildContext context) {
  53. return [
  54. PopupMenuButton<String>(
  55. onSelected: (value) {
  56. handleClick(value, _controller!);
  57. },
  58. itemBuilder: (context) {
  59. return actions.map((action) {
  60. return PopupMenuItem(
  61. value: action,
  62. child: SizedBox(width: 200, child: Text(action)),
  63. );
  64. }).toList();
  65. },
  66. ),
  67. ];
  68. }
  69. void handleClick(String value, CPDFReaderWidgetController controller) async {
  70. switch (value) {
  71. case 'Set Password':
  72. bool setPasswordResult = await controller.document.setPassword(
  73. userPassword: '1234',
  74. ownerPassword: '12345',
  75. allowsPrinting: false,
  76. allowsCopying: false,
  77. encryptAlgo: CPDFDocumentEncryptAlgo.aes256);
  78. debugPrint('ComPDFKit:set_user_password:$setPasswordResult');
  79. break;
  80. case 'Remove Password':
  81. bool removePasswordResult = await controller.document.removePassword();
  82. debugPrint('ComPDFKit:remove_user_password:$removePasswordResult');
  83. break;
  84. case 'Check Owner Password':
  85. bool result = await controller.document.checkOwnerPassword('12345');
  86. debugPrint('ComPDFKit:check_owner_password:$result');
  87. break;
  88. case 'Create Text Watermark':
  89. await controller.document.createWatermark(CPDFWatermark.text(
  90. textContent: 'Flutter',
  91. scale: 1.0,
  92. fontSize: 60,
  93. rotation: 0,
  94. horizontalAlignment: CPDFWatermarkHorizontalAlignment.center,
  95. verticalAlignment: CPDFWatermarkVerticalAlignment.center,
  96. textColor: Colors.red,
  97. pages: [0, 1, 2, 3]));
  98. break;
  99. case 'Create Image Watermark':
  100. File imageFile = await extractAsset(context, 'images/logo.png');
  101. await controller.document.createWatermark(CPDFWatermark.image(
  102. imagePath: imageFile.path,
  103. opacity: 1,
  104. scale: 1,
  105. rotation: 45,
  106. pages: [0, 1, 2, 3],
  107. horizontalAlignment: CPDFWatermarkHorizontalAlignment.center,
  108. verticalAlignment: CPDFWatermarkVerticalAlignment.center,
  109. ));
  110. break;
  111. case 'Create Image Watermark Pick Image':
  112. FilePickerResult? pickerResult = await FilePicker.platform
  113. .pickFiles(type: FileType.image, allowMultiple: false);
  114. if (pickerResult != null) {
  115. debugPrint('ComPDFKit:Document:${pickerResult.files.first.path}');
  116. await controller.document.createWatermark(CPDFWatermark.image(
  117. imagePath: pickerResult.files.first.path!,
  118. pages: [0, 1, 2, 3],
  119. scale: 0.3,
  120. horizontalAlignment: CPDFWatermarkHorizontalAlignment.center,
  121. verticalAlignment: CPDFWatermarkVerticalAlignment.center,
  122. ));
  123. return;
  124. }
  125. break;
  126. case 'Remove All Watermarks':
  127. await controller.document.removeAllWatermarks();
  128. break;
  129. case 'Document Info':
  130. var document = controller.document;
  131. debugPrint(
  132. 'ComPDFKit:Document: fileName:${await document.getFileName()}');
  133. debugPrint(
  134. 'ComPDFKit:Document: checkOwnerUnlocked:${await document.checkOwnerUnlocked()}');
  135. debugPrint(
  136. 'ComPDFKit:Document: isEncrypted:${await document.isEncrypted()}');
  137. debugPrint(
  138. 'ComPDFKit:Document: getPermissions:${await document.getPermissions()}');
  139. debugPrint(
  140. 'ComPDFKit:Document: getEncryptAlgorithm:${await document.getEncryptAlgo()}');
  141. break;
  142. }
  143. }
  144. }
  145. var actions = [
  146. 'Set Password',
  147. 'Remove Password',
  148. 'Check Owner Password',
  149. 'Create Text Watermark',
  150. 'Create Image Watermark',
  151. 'Create Image Watermark Pick Image',
  152. 'Remove All Watermarks',
  153. 'Document Info'
  154. ];