cpdf_reader_widget_controller_example.dart 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. // Copyright © 2014-2024 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 'dart:math';
  9. import 'package:compdfkit_flutter/configuration/cpdf_configuration.dart';
  10. import 'package:compdfkit_flutter/configuration/cpdf_options.dart';
  11. import 'package:compdfkit_flutter/util/extension/cpdf_color_extension.dart';
  12. import 'package:compdfkit_flutter/widgets/cpdf_reader_widget.dart';
  13. import 'package:compdfkit_flutter/widgets/cpdf_reader_widget_controller.dart';
  14. import 'package:file_picker/file_picker.dart';
  15. import 'package:flutter/material.dart';
  16. class CPDFReaderWidgetControllerExample extends StatefulWidget {
  17. final String documentPath;
  18. const CPDFReaderWidgetControllerExample({super.key, required this.documentPath});
  19. @override
  20. State<CPDFReaderWidgetControllerExample> createState() =>
  21. _CPDFReaderWidgetControllerExampleState();
  22. }
  23. class _CPDFReaderWidgetControllerExampleState
  24. extends State<CPDFReaderWidgetControllerExample> {
  25. CPDFReaderWidgetController? _controller;
  26. bool canScale = true;
  27. bool pageSameWidth = true;
  28. bool isFixedScroll = false;
  29. @override
  30. Widget build(BuildContext context) {
  31. return Scaffold(
  32. resizeToAvoidBottomInset: false,
  33. appBar: AppBar(
  34. title: const Text('CPDFReaderWidget Example'),
  35. leading: IconButton(
  36. onPressed: () {
  37. _save();
  38. Navigator.pop(context);
  39. },
  40. icon: const Icon(Icons.arrow_back)),
  41. actions: null == _controller
  42. ? []
  43. : [
  44. PopupMenuButton(onSelected: (value) {
  45. handleClick(value, _controller!);
  46. }, itemBuilder: (context) {
  47. return actions
  48. .map((e) => PopupMenuItem(value: e, child: Text(e)))
  49. .toList();
  50. })
  51. ],
  52. ),
  53. body: CPDFReaderWidget(
  54. document: widget.documentPath,
  55. configuration: CPDFConfiguration(toolbarConfig: const CPDFToolbarConfig(
  56. iosLeftBarAvailableActions: [CPDFToolbarAction.thumbnail]
  57. )),
  58. onCreated: (controller) {
  59. setState(() {
  60. _controller = controller;
  61. });
  62. },
  63. ));
  64. }
  65. void _save() async {
  66. bool saveResult = await _controller!.save();
  67. debugPrint('ComPDFKit-Flutter: saveResult:$saveResult');
  68. }
  69. void handleClick(String value, CPDFReaderWidgetController controller) async {
  70. switch (value) {
  71. case 'setScale':
  72. controller.setScale(1.5);
  73. break;
  74. case 'getScale':
  75. double scaleValue = await controller.getScale();
  76. debugPrint('ComPDFKit:CPDFReaderWidget-getScale():$scaleValue');
  77. break;
  78. case 'setCanScale':
  79. canScale = !canScale;
  80. await controller.setCanScale(canScale);
  81. break;
  82. case 'setFormHighlight':
  83. bool isFormFieldHighlight = await controller.isFormFieldHighlight();
  84. debugPrint('ComPDFKit:isFormFieldHighlight:$isFormFieldHighlight');
  85. controller.setFormFieldHighlight(!isFormFieldHighlight);
  86. break;
  87. case 'setLinkHighlight':
  88. bool isLinkHighlight = await controller.isLinkHighlight();
  89. debugPrint('ComPDFKit:isLinkHighlight:$isLinkHighlight');
  90. controller.setLinkHighlight(!isLinkHighlight);
  91. break;
  92. case 'setVerticalMode':
  93. bool isVerticalMode = await controller.isVerticalMode();
  94. debugPrint('ComPDFKit:isVerticalMode:$isVerticalMode');
  95. controller.setVerticalMode(!isVerticalMode);
  96. break;
  97. case 'setMargin':
  98. final Random random = Random();
  99. int value = random.nextInt(50);
  100. debugPrint('ComPDFKit:setMargin:$value');
  101. controller.setMargins(const CPDFEdgeInsets.symmetric(horizontal: 100, vertical: 10));
  102. break;
  103. case 'setContinueMode':
  104. bool isContinueMode = await controller.isContinueMode();
  105. debugPrint('ComPDFKit:isContinueMode:$isContinueMode');
  106. controller.setContinueMode(!isContinueMode);
  107. break;
  108. case 'setDoublePageMode':
  109. bool isDoublePageMode = await controller.isDoublePageMode();
  110. debugPrint('ComPDFKit:isDoublePageMode:$isDoublePageMode');
  111. controller.setDoublePageMode(!isDoublePageMode);
  112. break;
  113. case 'setCropMode':
  114. bool isCropMode = await controller.isCropMode();
  115. debugPrint('ComPDFKit:isCropMode:$isCropMode');
  116. controller.setCropMode(!isCropMode);
  117. break;
  118. case 'setDisplayPageIndex':
  119. int nextPageIndex = await controller.getCurrentPageIndex() + 1;
  120. controller.setDisplayPageIndex(nextPageIndex, animated: false);
  121. break;
  122. case 'getCurrentPageIndex':
  123. debugPrint('ComPDFKit:getCurrentPageIndex:${await controller.getCurrentPageIndex()}');
  124. break;
  125. case 'setCoverPageMode':
  126. bool isCoverPageMode = await controller.isCoverPageMode();
  127. debugPrint('ComPDFKit:isCoverPageMode:$isCoverPageMode');
  128. controller.setCoverPageMode(!isCoverPageMode);
  129. break;
  130. case 'pageSameWidth':
  131. pageSameWidth = !pageSameWidth;
  132. await controller.setPageSameWidth(pageSameWidth);
  133. break;
  134. case 'isPageInScreen':
  135. bool isPageInScreen = await controller.isPageInScreen(0);
  136. debugPrint('ComPDFKit:first page is in screen:$isPageInScreen');
  137. break;
  138. case 'setFixedScroll':
  139. isFixedScroll = !isFixedScroll;
  140. await controller.setFixedScroll(isFixedScroll);
  141. break;
  142. case 'setReadBackgroundColor':
  143. var currentReadBackgroundColor = await controller.getReadBackgroundColor();
  144. debugPrint('readBackgroundColor:${currentReadBackgroundColor.toHex()}');
  145. await controller.setReadBackgroundColor(theme: CPDFThemes.light);
  146. break;
  147. case 'isChanged':
  148. bool hasChange = await controller.hasChange();
  149. debugPrint('ComPDFKit:hasChange:$hasChange');
  150. break;
  151. case "documentInfo":
  152. var document = controller.document;
  153. debugPrint('ComPDFKit:Document: fileName:${await document.getFileName()}');
  154. debugPrint('ComPDFKit:Document: checkOwnerUnlocked:${await document.checkOwnerUnlocked()}');
  155. debugPrint('ComPDFKit:Document: hasChange:${await document.hasChange()}');
  156. debugPrint('ComPDFKit:Document: isEncrypted:${await document.isEncrypted()}');
  157. debugPrint('ComPDFKit:Document: isImageDoc:${await document.isImageDoc()}');
  158. debugPrint('ComPDFKit:Document: getPermissions:${await document.getPermissions()}');
  159. break;
  160. case "openDocument":
  161. FilePickerResult? result = await FilePicker.platform.pickFiles(
  162. type: FileType.custom,
  163. allowedExtensions: ['pdf'],
  164. );
  165. if (result != null) {
  166. var document = controller.document;
  167. document.open(result.files.first.path!, "");
  168. }
  169. break;
  170. }
  171. }
  172. }
  173. var actions = [
  174. 'setScale',
  175. 'getScale',
  176. if(Platform.isAndroid) ...[
  177. 'setCanScale',
  178. 'pageSameWidth',
  179. 'isPageInScreen',
  180. 'setFixedScroll',
  181. 'setReadBackgroundColor',
  182. ],
  183. 'setFormHighlight',
  184. 'setLinkHighlight',
  185. 'setVerticalMode',
  186. 'setMargin',
  187. 'setContinueMode',
  188. 'setDoublePageMode',
  189. 'setCropMode',
  190. 'setDisplayPageIndex',
  191. 'getCurrentPageIndex',
  192. 'setCoverPageMode',
  193. 'isChanged',
  194. 'documentInfo',
  195. 'openDocument'
  196. ];
  197. Color randomColor() {
  198. final Random random = Random();
  199. return Color.fromARGB(
  200. 255, // Alpha value (fully opaque)
  201. random.nextInt(256), // Red value
  202. random.nextInt(256), // Green value
  203. random.nextInt(256), // Blue value
  204. );
  205. }