Skip to content

Commit 9f84109

Browse files
authored
Add pdf converter (#1649)
* Add simple pdf converter
1 parent f6e6a18 commit 9f84109

31 files changed

Lines changed: 2017 additions & 18 deletions

.github/workflows/main.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ jobs:
3737

3838
- name: Install quill_html_converter dependencies
3939
run: flutter pub get -C quill_html_converter
40+
41+
- name: Install quill_pdf_converter dependencies
42+
run: flutter pub get -C quill_pdf_converter
4043

4144
- name: Run flutter analysis
4245
run: flutter analyze

CHANGELOG.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22

33
All notable changes to this project will be documented in this file.
44

5-
## 9.1.2
6-
* Fix the font size button and migrate to `MenuAnchor`
7-
* The `defaultDisplayText` is no longer required in the font size and header dropdown buttons
8-
95
## 9.1.1
106
* Fix bug [#1636](https://github.com/singerdmx/flutter-quill/issues/1636)
117
* Fix a where you paste styled content (HTML) it always insert a new line at first even if the document is empty
8+
* Fix the font size button and migrate to `MenuAnchor`
9+
* The `defaultDisplayText` is no longer required in the font size and header dropdown buttons
10+
* Add pdf converter in a new package (quill_pdf_converter)
1211

1312
## 9.1.0
1413
* Fix the simple toolbar by add properties of `IconButton` and fix some buttons

example/lib/screens/quill/quill_screen.dart

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ import 'package:flutter/material.dart';
44
import 'package:flutter_quill/flutter_quill.dart';
55
import 'package:flutter_quill_extensions/flutter_quill_extensions.dart'
66
show FlutterQuillEmbeds, QuillSharedExtensionsConfigurations;
7+
import 'package:pdf/pdf.dart';
8+
import 'package:pdf/widgets.dart' as pw;
9+
import 'package:printing/printing.dart';
710
import 'package:quill_html_converter/quill_html_converter.dart';
11+
import 'package:quill_pdf_converter/quill_pdf_converter.dart';
812
import 'package:share_plus/share_plus.dart' show Share;
913

1014
import '../../extensions/scaffold_messenger.dart';
@@ -71,14 +75,50 @@ class _QuillScreenState extends State<QuillScreen> {
7175
appBar: AppBar(
7276
title: const Text('Flutter Quill'),
7377
actions: [
74-
IconButton(
75-
tooltip: 'Load with HTML',
76-
onPressed: () {
77-
final html = _controller.document.toDelta().toHtml();
78-
_controller.document =
79-
Document.fromDelta(Document.fromHtml(html));
78+
MenuAnchor(
79+
builder: (context, controller, child) {
80+
return IconButton(
81+
onPressed: () {
82+
if (controller.isOpen) {
83+
controller.close();
84+
return;
85+
}
86+
controller.open();
87+
},
88+
icon: const Icon(
89+
Icons.more_vert,
90+
),
91+
);
8092
},
81-
icon: const Icon(Icons.html),
93+
menuChildren: [
94+
MenuItemButton(
95+
onPressed: () {
96+
final html = _controller.document.toDelta().toHtml();
97+
_controller.document =
98+
Document.fromDelta(Document.fromHtml(html));
99+
},
100+
child: const Text('Load with HTML'),
101+
),
102+
MenuItemButton(
103+
onPressed: () async {
104+
final pdfDocument = pw.Document();
105+
final pdfWidgets =
106+
await _controller.document.toDelta().toPdf();
107+
pdfDocument.addPage(
108+
pw.MultiPage(
109+
maxPages: 200,
110+
pageFormat: PdfPageFormat.a4,
111+
build: (context) {
112+
return pdfWidgets;
113+
},
114+
),
115+
);
116+
await Printing.layoutPdf(
117+
onLayout: (format) async => pdfDocument.save());
118+
},
119+
child: const Text('Print as PDF'),
120+
),
121+
],
82122
),
83123
IconButton(
84124
tooltip: 'Share',

example/linux/flutter/generated_plugin_registrant.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <desktop_drop/desktop_drop_plugin.h>
1010
#include <file_selector_linux/file_selector_plugin.h>
1111
#include <irondash_engine_context/irondash_engine_context_plugin.h>
12+
#include <printing/printing_plugin.h>
1213
#include <super_native_extensions/super_native_extensions_plugin.h>
1314
#include <url_launcher_linux/url_launcher_plugin.h>
1415

@@ -22,6 +23,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
2223
g_autoptr(FlPluginRegistrar) irondash_engine_context_registrar =
2324
fl_plugin_registry_get_registrar_for_plugin(registry, "IrondashEngineContextPlugin");
2425
irondash_engine_context_plugin_register_with_registrar(irondash_engine_context_registrar);
26+
g_autoptr(FlPluginRegistrar) printing_registrar =
27+
fl_plugin_registry_get_registrar_for_plugin(registry, "PrintingPlugin");
28+
printing_plugin_register_with_registrar(printing_registrar);
2529
g_autoptr(FlPluginRegistrar) super_native_extensions_registrar =
2630
fl_plugin_registry_get_registrar_for_plugin(registry, "SuperNativeExtensionsPlugin");
2731
super_native_extensions_plugin_register_with_registrar(super_native_extensions_registrar);

example/linux/flutter/generated_plugins.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
66
desktop_drop
77
file_selector_linux
88
irondash_engine_context
9+
printing
910
super_native_extensions
1011
url_launcher_linux
1112
)

example/macos/Flutter/GeneratedPluginRegistrant.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import file_selector_macos
1111
import gal
1212
import irondash_engine_context
1313
import path_provider_foundation
14+
import printing
1415
import share_plus
1516
import sqflite
1617
import super_native_extensions
@@ -24,6 +25,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
2425
GalPlugin.register(with: registry.registrar(forPlugin: "GalPlugin"))
2526
IrondashEngineContextPlugin.register(with: registry.registrar(forPlugin: "IrondashEngineContextPlugin"))
2627
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
28+
PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin"))
2729
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
2830
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
2931
SuperNativeExtensionsPlugin.register(with: registry.registrar(forPlugin: "SuperNativeExtensionsPlugin"))

example/macos/Podfile.lock

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ PODS:
1717
- path_provider_foundation (0.0.1):
1818
- Flutter
1919
- FlutterMacOS
20+
- printing (1.0.0):
21+
- FlutterMacOS
2022
- share_plus (0.0.1):
2123
- FlutterMacOS
2224
- sqflite (0.0.2):
@@ -38,6 +40,7 @@ DEPENDENCIES:
3840
- gal (from `Flutter/ephemeral/.symlinks/plugins/gal/darwin`)
3941
- irondash_engine_context (from `Flutter/ephemeral/.symlinks/plugins/irondash_engine_context/macos`)
4042
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
43+
- printing (from `Flutter/ephemeral/.symlinks/plugins/printing/macos`)
4144
- share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`)
4245
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`)
4346
- super_native_extensions (from `Flutter/ephemeral/.symlinks/plugins/super_native_extensions/macos`)
@@ -63,6 +66,8 @@ EXTERNAL SOURCES:
6366
:path: Flutter/ephemeral/.symlinks/plugins/irondash_engine_context/macos
6467
path_provider_foundation:
6568
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
69+
printing:
70+
:path: Flutter/ephemeral/.symlinks/plugins/printing/macos
6671
share_plus:
6772
:path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos
6873
sqflite:
@@ -83,6 +88,7 @@ SPEC CHECKSUMS:
8388
gal: 61e868295d28fe67ffa297fae6dacebf56fd53e1
8489
irondash_engine_context: da62996ee25616d2f01bbeb85dc115d813359478
8590
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
91+
printing: 1dd6a1fce2209ec240698e2439a4adbb9b427637
8692
share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7
8793
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea
8894
super_native_extensions: 85efee3a7495b46b04befcfc86ed12069264ebf3

example/macos/Runner/DebugProfile.entitlements

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,7 @@
1414
<true/>
1515
<!-- <key>com.apple.security.files.user-selected.read-write</key>
1616
<true/> -->
17+
<key>com.apple.security.print</key>
18+
<true/>
1719
</dict>
1820
</plist>

example/macos/Runner/Release.entitlements

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@
1010
<true/>
1111
<!-- <key>com.apple.security.files.user-selected.read-write</key>
1212
<true/> -->
13+
<key>com.apple.security.print</key>
14+
<true/>
1315
</dict>
1416
</plist>

example/pubspec.yaml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,18 @@ dependencies:
1313
cupertino_icons: ^1.0.6
1414

1515
# Flutter Quill Packages
16-
flutter_quill: ^8.6.4
17-
flutter_quill_extensions: ^0.7.2
18-
flutter_quill_test: ^0.0.5
16+
flutter_quill: ^9.1.0
17+
flutter_quill_extensions: ^9.1.0
18+
flutter_quill_test: ^9.1.0
1919
quill_html_converter: ^0.0.1-experimental.1
20+
quill_pdf_converter: ^9.1.0
2021

2122
# Normal Packages
2223
path: ^1.8.3
2324
equatable: ^2.0.5
2425
cross_file: ^0.3.3+6
2526
cached_network_image: ^3.3.0
27+
pdf: ^3.10.7
2628

2729
# Bloc libraries
2830
bloc: ^8.1.2
@@ -36,7 +38,7 @@ dependencies:
3638
json_annotation: ^4.8.1
3739

3840
# Plugins
39-
image_cropper: ^5.0.0
41+
image_cropper: ^5.0.1
4042
path_provider: ^2.1.1
4143
# For drag and drop feature
4244
desktop_drop: ^0.4.4
@@ -45,6 +47,7 @@ dependencies:
4547
# For sharing text
4648
share_plus: ^7.2.1
4749
super_clipboard: ^0.7.3
50+
printing: ^5.11.1
4851

4952
dependency_overrides:
5053
flutter_quill:
@@ -55,6 +58,8 @@ dependency_overrides:
5558
path: ../flutter_quill_test
5659
quill_html_converter:
5760
path: ../quill_html_converter
61+
quill_pdf_converter:
62+
path: ../quill_pdf_converter
5863

5964

6065
dev_dependencies:

0 commit comments

Comments
 (0)