David PHAM-VAN

Fix raster pages on Android and Web

... ... @@ -3,6 +3,7 @@
## 3.7.2
- Fix Printing on WEB
- Fix raster pages on Android and Web
## 3.7.1
... ...
... ... @@ -7,6 +7,7 @@ import android.print.PrintAttributes;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import java.util.ArrayList;
import java.util.HashMap;
import io.flutter.plugin.common.MethodCall;
... ... @@ -89,7 +90,7 @@ public class PrintingHandler implements MethodChannel.MethodCallHandler {
}
case "rasterPdf": {
final byte[] document = call.argument("doc");
final int[] pages = call.argument("pages");
final ArrayList<Integer> pages = call.argument("pages");
Double scale = call.argument("scale");
final PrintingJob printJob =
new PrintingJob(activity, this, (int) call.argument("job"));
... ...
... ... @@ -53,6 +53,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
... ... @@ -302,7 +303,7 @@ public class PrintingJob extends PrintDocumentAdapter {
callback.onLayoutFinished(info, true);
}
void rasterPdf(final byte[] data, final int[] pages, final Double scale) {
void rasterPdf(final byte[] data, final ArrayList<Integer> pages, final Double scale) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {
Log.e("PDF", "PDF Raster available since Android 5.0 Lollipop (API 21)");
printing.onPageRasterEnd(this);
... ... @@ -327,9 +328,9 @@ public class PrintingJob extends PrintDocumentAdapter {
Log.e("PDF", "Unable to delete temporary file");
}
final int pageCount = pages != null ? pages.length : renderer.getPageCount();
final int pageCount = pages != null ? pages.size() : renderer.getPageCount();
for (int i = 0; i < pageCount; i++) {
PdfRenderer.Page page = renderer.openPage(pages == null ? i : pages[i]);
PdfRenderer.Page page = renderer.openPage(pages == null ? i : pages.get(i));
final int width = Double.valueOf(page.getWidth() * scale).intValue();
final int height = Double.valueOf(page.getHeight() * scale).intValue();
... ...
... ... @@ -30,6 +30,7 @@ class PdfPreview extends StatefulWidget {
this.pdfPreviewPageDecoration,
this.pdfFileName,
this.useActions = true,
this.pages,
}) : super(key: key);
/// Called when a pdf document is needed
... ... @@ -77,6 +78,9 @@ class PdfPreview extends StatefulWidget {
/// Name of the PDF when sharing. It must include the extension.
final String pdfFileName;
/// Pages to display. Default will display all the pages.
final List<int> pages;
@override
_PdfPreviewState createState() => _PdfPreviewState();
}
... ... @@ -123,7 +127,11 @@ class _PdfPreviewState extends State<PdfPreview> {
}
var pageNum = 0;
await for (final PdfRaster page in Printing.raster(_doc, dpi: dpi)) {
await for (final PdfRaster page in Printing.raster(
_doc,
dpi: dpi,
pages: widget.pages,
)) {
if (!mounted) {
return;
}
... ...
... ... @@ -194,8 +194,9 @@ class PrintingPlugin extends PrintingPlatform {
final html.CanvasElement canvas =
js.context['document'].createElement('canvas');
final html.CanvasRenderingContext2D context = canvas.getContext('2d');
final _pages = pages ?? Iterable<int>.generate(numPages, (index) => index);
for (var i = 0; i < numPages; i++) {
for (final i in _pages) {
final page = await promiseToFuture<PdfJsPage>(d.getPage(i + 1));
final viewport = page.getViewport(Settings()..scale = 1.5);
... ...