Showing
5 changed files
with
18 additions
and
6 deletions
@@ -7,6 +7,7 @@ import android.print.PrintAttributes; | @@ -7,6 +7,7 @@ import android.print.PrintAttributes; | ||
7 | import androidx.annotation.NonNull; | 7 | import androidx.annotation.NonNull; |
8 | import androidx.annotation.RequiresApi; | 8 | import androidx.annotation.RequiresApi; |
9 | 9 | ||
10 | +import java.util.ArrayList; | ||
10 | import java.util.HashMap; | 11 | import java.util.HashMap; |
11 | 12 | ||
12 | import io.flutter.plugin.common.MethodCall; | 13 | import io.flutter.plugin.common.MethodCall; |
@@ -89,7 +90,7 @@ public class PrintingHandler implements MethodChannel.MethodCallHandler { | @@ -89,7 +90,7 @@ public class PrintingHandler implements MethodChannel.MethodCallHandler { | ||
89 | } | 90 | } |
90 | case "rasterPdf": { | 91 | case "rasterPdf": { |
91 | final byte[] document = call.argument("doc"); | 92 | final byte[] document = call.argument("doc"); |
92 | - final int[] pages = call.argument("pages"); | 93 | + final ArrayList<Integer> pages = call.argument("pages"); |
93 | Double scale = call.argument("scale"); | 94 | Double scale = call.argument("scale"); |
94 | final PrintingJob printJob = | 95 | final PrintingJob printJob = |
95 | new PrintingJob(activity, this, (int) call.argument("job")); | 96 | new PrintingJob(activity, this, (int) call.argument("job")); |
@@ -53,6 +53,7 @@ import java.io.FileOutputStream; | @@ -53,6 +53,7 @@ import java.io.FileOutputStream; | ||
53 | import java.io.IOException; | 53 | import java.io.IOException; |
54 | import java.io.OutputStream; | 54 | import java.io.OutputStream; |
55 | import java.nio.ByteBuffer; | 55 | import java.nio.ByteBuffer; |
56 | +import java.util.ArrayList; | ||
56 | import java.util.HashMap; | 57 | import java.util.HashMap; |
57 | import java.util.List; | 58 | import java.util.List; |
58 | 59 | ||
@@ -302,7 +303,7 @@ public class PrintingJob extends PrintDocumentAdapter { | @@ -302,7 +303,7 @@ public class PrintingJob extends PrintDocumentAdapter { | ||
302 | callback.onLayoutFinished(info, true); | 303 | callback.onLayoutFinished(info, true); |
303 | } | 304 | } |
304 | 305 | ||
305 | - void rasterPdf(final byte[] data, final int[] pages, final Double scale) { | 306 | + void rasterPdf(final byte[] data, final ArrayList<Integer> pages, final Double scale) { |
306 | if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) { | 307 | if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) { |
307 | Log.e("PDF", "PDF Raster available since Android 5.0 Lollipop (API 21)"); | 308 | Log.e("PDF", "PDF Raster available since Android 5.0 Lollipop (API 21)"); |
308 | printing.onPageRasterEnd(this); | 309 | printing.onPageRasterEnd(this); |
@@ -327,9 +328,9 @@ public class PrintingJob extends PrintDocumentAdapter { | @@ -327,9 +328,9 @@ public class PrintingJob extends PrintDocumentAdapter { | ||
327 | Log.e("PDF", "Unable to delete temporary file"); | 328 | Log.e("PDF", "Unable to delete temporary file"); |
328 | } | 329 | } |
329 | 330 | ||
330 | - final int pageCount = pages != null ? pages.length : renderer.getPageCount(); | 331 | + final int pageCount = pages != null ? pages.size() : renderer.getPageCount(); |
331 | for (int i = 0; i < pageCount; i++) { | 332 | for (int i = 0; i < pageCount; i++) { |
332 | - PdfRenderer.Page page = renderer.openPage(pages == null ? i : pages[i]); | 333 | + PdfRenderer.Page page = renderer.openPage(pages == null ? i : pages.get(i)); |
333 | 334 | ||
334 | final int width = Double.valueOf(page.getWidth() * scale).intValue(); | 335 | final int width = Double.valueOf(page.getWidth() * scale).intValue(); |
335 | final int height = Double.valueOf(page.getHeight() * scale).intValue(); | 336 | final int height = Double.valueOf(page.getHeight() * scale).intValue(); |
@@ -30,6 +30,7 @@ class PdfPreview extends StatefulWidget { | @@ -30,6 +30,7 @@ class PdfPreview extends StatefulWidget { | ||
30 | this.pdfPreviewPageDecoration, | 30 | this.pdfPreviewPageDecoration, |
31 | this.pdfFileName, | 31 | this.pdfFileName, |
32 | this.useActions = true, | 32 | this.useActions = true, |
33 | + this.pages, | ||
33 | }) : super(key: key); | 34 | }) : super(key: key); |
34 | 35 | ||
35 | /// Called when a pdf document is needed | 36 | /// Called when a pdf document is needed |
@@ -77,6 +78,9 @@ class PdfPreview extends StatefulWidget { | @@ -77,6 +78,9 @@ class PdfPreview extends StatefulWidget { | ||
77 | /// Name of the PDF when sharing. It must include the extension. | 78 | /// Name of the PDF when sharing. It must include the extension. |
78 | final String pdfFileName; | 79 | final String pdfFileName; |
79 | 80 | ||
81 | + /// Pages to display. Default will display all the pages. | ||
82 | + final List<int> pages; | ||
83 | + | ||
80 | @override | 84 | @override |
81 | _PdfPreviewState createState() => _PdfPreviewState(); | 85 | _PdfPreviewState createState() => _PdfPreviewState(); |
82 | } | 86 | } |
@@ -123,7 +127,11 @@ class _PdfPreviewState extends State<PdfPreview> { | @@ -123,7 +127,11 @@ class _PdfPreviewState extends State<PdfPreview> { | ||
123 | } | 127 | } |
124 | 128 | ||
125 | var pageNum = 0; | 129 | var pageNum = 0; |
126 | - await for (final PdfRaster page in Printing.raster(_doc, dpi: dpi)) { | 130 | + await for (final PdfRaster page in Printing.raster( |
131 | + _doc, | ||
132 | + dpi: dpi, | ||
133 | + pages: widget.pages, | ||
134 | + )) { | ||
127 | if (!mounted) { | 135 | if (!mounted) { |
128 | return; | 136 | return; |
129 | } | 137 | } |
@@ -194,8 +194,9 @@ class PrintingPlugin extends PrintingPlatform { | @@ -194,8 +194,9 @@ class PrintingPlugin extends PrintingPlatform { | ||
194 | final html.CanvasElement canvas = | 194 | final html.CanvasElement canvas = |
195 | js.context['document'].createElement('canvas'); | 195 | js.context['document'].createElement('canvas'); |
196 | final html.CanvasRenderingContext2D context = canvas.getContext('2d'); | 196 | final html.CanvasRenderingContext2D context = canvas.getContext('2d'); |
197 | + final _pages = pages ?? Iterable<int>.generate(numPages, (index) => index); | ||
197 | 198 | ||
198 | - for (var i = 0; i < numPages; i++) { | 199 | + for (final i in _pages) { |
199 | final page = await promiseToFuture<PdfJsPage>(d.getPage(i + 1)); | 200 | final page = await promiseToFuture<PdfJsPage>(d.getPage(i + 1)); |
200 | final viewport = page.getViewport(Settings()..scale = 1.5); | 201 | final viewport = page.getViewport(Settings()..scale = 1.5); |
201 | 202 |
-
Please register or login to post a comment