Browse Source

添加导出PDF

weicu
tanlongsheng 1 year ago
parent
commit
5da736f2f6
  1. BIN
      assets/fonts/NotoSansSC-Regular.ttf
  2. 31
      lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart
  3. 2
      pubspec.yaml

BIN
assets/fonts/NotoSansSC-Regular.ttf

Binary file not shown.

31
lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart

@ -7,6 +7,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart'; import 'package:get_storage/get_storage.dart';
import 'package:htmltopdfwidgets/htmltopdfwidgets.dart' as pdf;
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart'; import 'package:share_plus/share_plus.dart';
import 'package:webview_flutter/webview_flutter.dart'; import 'package:webview_flutter/webview_flutter.dart';
@ -158,6 +159,7 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
'导出为', '导出为',
(int index) async { (int index) async {
if (index == 0) { if (index == 0) {
// 导出TXT
final tempDir = final tempDir =
await getTemporaryDirectory(); await getTemporaryDirectory();
final file = File( final file = File(
@ -165,7 +167,10 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
await file.writeAsString(_controller await file.writeAsString(_controller
.meetingDetails.value.summary); .meetingDetails.value.summary);
_share(file.path, '分享会议总结'); _share(file.path, '分享会议总结');
} else {} } else {
// 导出PDF
_exportMarkdownPdf();
}
}, },
const [ const [
{ {
@ -286,7 +291,7 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
); );
} }
void _share(String filepath, String title) async { Future<void> _share(String filepath, String title) async {
final result = await SharePlus.instance.share(ShareParams( final result = await SharePlus.instance.share(ShareParams(
text: title, text: title,
files: [XFile(filepath)], files: [XFile(filepath)],
@ -332,4 +337,26 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
await file.writeAsBytes(byteData.buffer.asUint8List()); await file.writeAsBytes(byteData.buffer.asUint8List());
return XFile(file.path); return XFile(file.path);
} }
Future<void> _exportMarkdownPdf() async {
EasyLoading.show(status: '正在导出PDF...');
final tempDir = await getTemporaryDirectory();
final file = File(
'${tempDir.path}/${_controller.meetingData.value.title}_summary.pdf');
final List<pdf.Widget> markdownWidgets =
await pdf.HTMLToPdf().convertMarkdown(
_controller.meetingDetails.value.summary,
fontFallback: [
pdf.Font.ttf(
await rootBundle.load('assets/fonts/NotoSansSC-Regular.ttf')),
],
);
final markdownPdf = pdf.Document();
markdownPdf.addPage(pdf.MultiPage(
build: (context) => markdownWidgets,
));
await file.writeAsBytes(await markdownPdf.save());
await _share(file.path, '分享会议总结');
EasyLoading.dismiss();
}
} }

2
pubspec.yaml

@ -25,6 +25,7 @@ dependencies:
markdown: ^7.1.1 markdown: ^7.1.1
fleather: ^1.24.0+1 fleather: ^1.24.0+1
parchment: ^1.24.0 parchment: ^1.24.0
htmltopdfwidgets: ^1.1.0
wifi_iot: ^0.3.19+2 wifi_iot: ^0.3.19+2
permission_handler: ^10.4.5 permission_handler: ^10.4.5
web_socket_channel: ^2.4.0 web_socket_channel: ^2.4.0
@ -134,6 +135,7 @@ flutter:
- assets/images/explore1.png - assets/images/explore1.png
- assets/images/explore2.jpg - assets/images/explore2.jpg
- assets/images/mine-background.png - assets/images/mine-background.png
- assets/fonts/NotoSansSC-Regular.ttf
- assets/lottie/ - assets/lottie/
- assets/js/ - assets/js/
- .env - .env

Loading…
Cancel
Save