Как преобразовать весь экран flutter в PDF?

#flutter

#flutter

Вопрос:

У меня есть приложение электронной коммерции flutter, в котором есть страница OrderDetails, я хочу преобразовать всю страницу в PDF, используя пакет flutter pdf, так как это было бы удобнее, потому что данные извлекаются из FirebaseFirestore. Есть ли способ, которым я могу этого добиться?

я хочу преобразовать весь экран flutter в PDF, используя эту библиотеку

Комментарии:

1. с какой проблемой вы столкнулись?

Ответ №1:

Вы можете сделать снимок экрана, используя этот скриншот пакета

затем добавьте это изображение в документ PDF и сохраните его

 import 'dart:io';
import 'dart:typed_data';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart ' as pw;

Future getPdf(Uint8List screenShot) async {
  pw.Document pdf = pw.Document();
  pdf.addPage(
    pw.Page(
      pageFormat: PdfPageFormat.a4,
      build: (context) {
        return pw.Expanded(
          child: pw.Image(PdfImage.file(pdf.document, bytes: screenShot), fit: pw.BoxFit.contain)
        );
      },
    ),
  );
  File pdfFile = File('Your path   File name');
  pdfFile.writeAsBytesSync(pdf.save());
}
  

Комментарии:

1. предоставленная вами ссылка относится к пакету pdf для flutter , pub.dev/packages/screenshot это тот пакет, который вы указали как скриншот?

2. О, да, извините, я виноват. Да, это тот самый.

3. спасибо за ваш ответ, попробую и сообщу вам о результате.

4. @IshangaVidusha Я получил эту ошибку « Тип аргумента ‘PdfImage’ не может быть присвоен типу параметра ‘ImageProvider « в строке PdfImage(pdf.document, байты: скриншот), fit: pw.BoxFit.contain). у вас есть какой-либо ответ на это. это было бы действительно полезно

5. @basudevnayak вы можете мне помочь с этим

Ответ №2:

полная информация: загрузка зависимостей в pubspec.yaml:

  screenshot: 
  share_plus: 
  path_provider:
  permission_handler:
  

импортируйте пакеты в свой файл dart:

 import 'package:screenshot/screenshot.dart';
import 'package:share_plus/share_plus.dart';
import 'package:permission_handler/permission_handler.dart';

  shareImage() async {

    final uint8List = await screenshotController.capture();
    String tempPath = (await getTemporaryDirectory()).path;
    String fileName ="myFile";
    if (await Permission.storage.request().isGranted) {
      File file = await File('$tempPath/$fileName.png').create();
      file.writeAsBytesSync(uint8List);
      await Share.shareFiles([file.path]);
    }
  }
  

и вызовите shareImage() в любом месте:

  GestureDetector(
   onTap: (){ shareImage();},
   child: ........,
  ),
  

не забудьте обернуть виджет желаний в:

 Screenshot(
    controller: screenshotController,
    child: Text("This text will be captured as image"),
),
  

Ответ №3:

   newest solution will be
    shareImage() async {
    final uint8List = await screenshotController.capture();
        String tempPath = (await getTemporaryDirectory()).path;
    String fileName =" ";>>>>>your file name between ""
    File file = await File('$tempPath/$fileName" }.png').create();
    file.writeAsBytesSync(uint8List!);
     await Share.shareFiles([file.path]);
    }
  

Комментарии:

1. Привет, @Mendes! Спасибо за ваше предложение! Код выглядит хорошо! Не могли бы вы подробнее рассказать о том, как это вписывается в полноценный виджет?

2. github.com/vmendesneto/calculadora_capital/blob/master/lib/src/…

Ответ №4:

 import 'dart:io';
import 'dart:typed_data';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart ' as pw;
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';

Future screenToPdf(String fileName,Uint8List screenShot) async {
  pw.Document pdf = pw.Document();
  pdf.addPage(
    pw.Page(
      pageFormat: PdfPageFormat.a4,
      build: (context) {
        return pw.Expanded(
          child: pw.Image(pw.MemoryImage(screenShot), fit: pw.BoxFit.contain),
        );
      },
    ),
  );
  String path = (await getTemporaryDirectory()).path;
  File pdfFile = await File('$path/$fileName.pdf').create();

  pdfFile.writeAsBytesSync(await pdf.save());
  await Share.shareFiles([pdfFile.path]);
}