Showing
4 changed files
with
33 additions
and
11 deletions
@@ -7,6 +7,7 @@ | @@ -7,6 +7,7 @@ | ||
7 | - Fix raster quality on Android | 7 | - Fix raster quality on Android |
8 | - Use a CDN for emoji and cupertino fonts | 8 | - Use a CDN for emoji and cupertino fonts |
9 | - Improved Android rendering | 9 | - Improved Android rendering |
10 | +- Add dpi attribute to PdfPreview | ||
10 | 11 | ||
11 | ## 5.7.1 | 12 | ## 5.7.1 |
12 | 13 |
@@ -40,6 +40,7 @@ class PdfPreviewCustom extends StatefulWidget { | @@ -40,6 +40,7 @@ class PdfPreviewCustom extends StatefulWidget { | ||
40 | this.padding, | 40 | this.padding, |
41 | this.shouldRepaint = false, | 41 | this.shouldRepaint = false, |
42 | this.loadingWidget, | 42 | this.loadingWidget, |
43 | + this.dpi, | ||
43 | }) : super(key: key); | 44 | }) : super(key: key); |
44 | 45 | ||
45 | /// Pdf paper page format | 46 | /// Pdf paper page format |
@@ -78,6 +79,10 @@ class PdfPreviewCustom extends StatefulWidget { | @@ -78,6 +79,10 @@ class PdfPreviewCustom extends StatefulWidget { | ||
78 | /// If null, a [CircularProgressIndicator] is used instead. | 79 | /// If null, a [CircularProgressIndicator] is used instead. |
79 | final Widget? loadingWidget; | 80 | final Widget? loadingWidget; |
80 | 81 | ||
82 | + /// The rendering dots per inch resolution | ||
83 | + /// If not provided, this value is calculated. | ||
84 | + final double? dpi; | ||
85 | + | ||
81 | @override | 86 | @override |
82 | PdfPreviewCustomState createState() => PdfPreviewCustomState(); | 87 | PdfPreviewCustomState createState() => PdfPreviewCustomState(); |
83 | } | 88 | } |
@@ -103,6 +108,9 @@ class PdfPreviewCustomState extends State<PdfPreviewCustom> | @@ -103,6 +108,9 @@ class PdfPreviewCustomState extends State<PdfPreviewCustom> | ||
103 | static const _errorMessage = 'Unable to display the document'; | 108 | static const _errorMessage = 'Unable to display the document'; |
104 | 109 | ||
105 | @override | 110 | @override |
111 | + double? get forcedDpi => widget.dpi; | ||
112 | + | ||
113 | + @override | ||
106 | void dispose() { | 114 | void dispose() { |
107 | previewUpdate?.cancel(); | 115 | previewUpdate?.cancel(); |
108 | super.dispose(); | 116 | super.dispose(); |
@@ -60,6 +60,7 @@ class PdfPreview extends StatefulWidget { | @@ -60,6 +60,7 @@ class PdfPreview extends StatefulWidget { | ||
60 | this.shouldRepaint = false, | 60 | this.shouldRepaint = false, |
61 | this.loadingWidget, | 61 | this.loadingWidget, |
62 | this.onPageFormatChanged, | 62 | this.onPageFormatChanged, |
63 | + this.dpi, | ||
63 | }) : super(key: key); | 64 | }) : super(key: key); |
64 | 65 | ||
65 | static const _defaultPageFormats = <String, PdfPageFormat>{ | 66 | static const _defaultPageFormats = <String, PdfPageFormat>{ |
@@ -158,6 +159,10 @@ class PdfPreview extends StatefulWidget { | @@ -158,6 +159,10 @@ class PdfPreview extends StatefulWidget { | ||
158 | /// The page format has changed | 159 | /// The page format has changed |
159 | final ValueChanged<PdfPageFormat>? onPageFormatChanged; | 160 | final ValueChanged<PdfPageFormat>? onPageFormatChanged; |
160 | 161 | ||
162 | + /// The rendering dots per inch resolution | ||
163 | + /// If not provided, this value is calculated. | ||
164 | + final double? dpi; | ||
165 | + | ||
161 | @override | 166 | @override |
162 | _PdfPreviewState createState() => _PdfPreviewState(); | 167 | _PdfPreviewState createState() => _PdfPreviewState(); |
163 | } | 168 | } |
@@ -323,6 +328,7 @@ class _PdfPreviewState extends State<PdfPreview> { | @@ -323,6 +328,7 @@ class _PdfPreviewState extends State<PdfPreview> { | ||
323 | previewPageMargin: widget.previewPageMargin, | 328 | previewPageMargin: widget.previewPageMargin, |
324 | scrollViewDecoration: widget.scrollViewDecoration, | 329 | scrollViewDecoration: widget.scrollViewDecoration, |
325 | shouldRepaint: widget.shouldRepaint, | 330 | shouldRepaint: widget.shouldRepaint, |
331 | + dpi: widget.dpi, | ||
326 | ), | 332 | ), |
327 | ), | 333 | ), |
328 | if (actions.isNotEmpty && widget.useActions) | 334 | if (actions.isNotEmpty && widget.useActions) |
@@ -48,6 +48,8 @@ mixin PdfPreviewRaster on State<PdfPreviewCustom> { | @@ -48,6 +48,8 @@ mixin PdfPreviewRaster on State<PdfPreviewCustom> { | ||
48 | /// Dots per inch | 48 | /// Dots per inch |
49 | double dpi = PdfPageFormat.inch; | 49 | double dpi = PdfPageFormat.inch; |
50 | 50 | ||
51 | + double? get forcedDpi; | ||
52 | + | ||
51 | var _rastering = false; | 53 | var _rastering = false; |
52 | 54 | ||
53 | Timer? _previewUpdate; | 55 | Timer? _previewUpdate; |
@@ -62,21 +64,26 @@ mixin PdfPreviewRaster on State<PdfPreviewCustom> { | @@ -62,21 +64,26 @@ mixin PdfPreviewRaster on State<PdfPreviewCustom> { | ||
62 | void raster() { | 64 | void raster() { |
63 | _previewUpdate?.cancel(); | 65 | _previewUpdate?.cancel(); |
64 | _previewUpdate = Timer(_updateTime, () { | 66 | _previewUpdate = Timer(_updateTime, () { |
65 | - final mq = MediaQuery.of(context); | ||
66 | - final double dpr; | ||
67 | - if (!kIsWeb && Platform.isAndroid) { | ||
68 | - if (mq.size.shortestSide * mq.devicePixelRatio < 800) { | ||
69 | - dpr = 2 * mq.devicePixelRatio; | 67 | + if (forcedDpi != null) { |
68 | + dpi = forcedDpi!; | ||
69 | + } else { | ||
70 | + final mq = MediaQuery.of(context); | ||
71 | + final double dpr; | ||
72 | + if (!kIsWeb && Platform.isAndroid) { | ||
73 | + if (mq.size.shortestSide * mq.devicePixelRatio < 800) { | ||
74 | + dpr = 2 * mq.devicePixelRatio; | ||
75 | + } else { | ||
76 | + dpr = mq.devicePixelRatio; | ||
77 | + } | ||
70 | } else { | 78 | } else { |
71 | dpr = mq.devicePixelRatio; | 79 | dpr = mq.devicePixelRatio; |
72 | } | 80 | } |
73 | - } else { | ||
74 | - dpr = mq.devicePixelRatio; | 81 | + dpi = |
82 | + (min(mq.size.width - 16, widget.maxPageWidth ?? double.infinity)) * | ||
83 | + dpr / | ||
84 | + pageFormat.width * | ||
85 | + PdfPageFormat.inch; | ||
75 | } | 86 | } |
76 | - dpi = (min(mq.size.width - 16, widget.maxPageWidth ?? double.infinity)) * | ||
77 | - dpr / | ||
78 | - pageFormat.width * | ||
79 | - PdfPageFormat.inch; | ||
80 | 87 | ||
81 | _raster(); | 88 | _raster(); |
82 | }); | 89 | }); |
-
Please register or login to post a comment