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