Слишком медленное создание PDF-файла с изображением - PullRequest
0 голосов
/ 07 сентября 2018

Я работаю над приложением генератора PDF во флаттере, но когда я хочу добавить изображение в PDF, это занимает слишком много времени, и я хотел знать, как можно добавить несколько изображений.

Я использую 3 библиотеки, сборщик изображений - pdf - печать

вот мой код:

Future getImage() async {
  var image = await ImagePicker.pickImage(source: ImageSource.gallery);
  final tempDir = await getTemporaryDirectory();
  final path = tempDir.path;
  int rand = new Math.Random().nextInt(10000000);
  imge.Image imagee = imge.decodeImage(image.readAsBytesSync());
  imge.Image smallerImage = imge.copyResize(imagee, 500);
  setState(() {
   var  _image =  new   File('$path/img_$rand.jpg')..writeAsBytesSync(imge.encodeJpg(smallerImage, quality: 85));

   _sharePdf(_image);
  });


}



 PDFDocument _generateDocument(File _image)  {
    final pdf = new PDFDocument(deflate: zlib.encode);
    final page = new PDFPage(pdf, pageFormat: PDFPageFormat.LETTER);
    final g = page.getGraphics();
    final font = new PDFFont(pdf);
    final top = page.pageFormat.height;

    print(top);

    imge.Image img = imge.decodeImage(_image.readAsBytesSync());


    PDFImage image = new PDFImage(
       pdf,
       image: img.data.buffer.asUint8List(),
       width: img.width,
       height: img.height);

   g.drawImage(image, 100.0, top - 150.0, 80.0, 100.0);

    return pdf;
  }

  void _sharePdf(File _image) {
    print("Share ...");
    final pdf = _generateDocument(_image);

    // Calculate the widget center for iPad sharing popup position
    final RenderBox referenceBox =
    shareWidget.currentContext.findRenderObject();
    final topLeft =
    referenceBox.localToGlobal(referenceBox.paintBounds.topLeft);
    final bottomRight =
    referenceBox.localToGlobal(referenceBox.paintBounds.bottomRight);
    final bounds = new Rect.fromPoints(topLeft, bottomRight);

    Printing.sharePdf(document: pdf, bounds: bounds);
  }

Затем я вызываю функцию getImage ().

После того, как я выберу изображение, это займет 2-3 минуты, в течение которых все зависает, тогда вы можете поделиться pdf!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...