【问题标题】:creating pdf in flutter Error :Failed assertion: line 117 pos 12: '!_paint': The document has already been saved在颤振中创建 pdf 错误:断言失败:第 117 行 pos 12:\'!_paint\':文档已保存
【发布时间】:2022-08-11 03:34:27
【问题描述】:

我是新手,在遵循 PDF 发票教程时遇到了一些问题。 第一次打印 PDF 一切正常,但是在添加/编辑一些数据后第二次尝试时,PDF 文件仍然是第一个 PDF,我得到了标题所示的错误。

未处理的异常:\'package:pdf/src/widgets/document.dart\':断言失败:第 117 行 pos 12:\'!_paint\':文档已保存。

以下是我的部分代码

  onClicked: () async {
                  
                  final date = DateTime.now();
                  final dueDate = date.add(Duration(days: 7));

                  final invoice = Invoice(
                    supplier: Supplier(
                      name: \'..\',
                      address: \'000\',
                      paymentInfo: \'**.com\',
                    ),
                    info: InvoiceInfo(
                      date: date,
                      dueDate: dueDate,
                      description: data.texttobeinsert,
                      number: \'${DateTime.now().year}-9999\',
                    ),
                    infoYourSignature: InvoiceInfo2(
                      date: date,
                      dueDate: dueDate,
                      description: data.texttobeinsert2,
                      number: \'${DateTime.now().year}-9999\',
                    ),
                    items: [
                      InvoiceItem(
                        description:
                    
                            AppLocalizations.of(context)!
                                .translate(\'net_monthly_incomedsr\')!,
                        unitPrice: AppLocalizations.of(context)!
                                .translate(\'currency\')! +
                            oCcy1.format(data.netmonthlyincome),
                      ),
                      InvoiceItem(
                        description: AppLocalizations.of(context)!
                            .translate(\'other_income\')!,
                        //  date: DateTime.now(),
                        //    quantity: 8,
                        //     vat: 0.19,
                        unitPrice: AppLocalizations.of(context)!
                                .translate(\'currency\')! +
                            oCcy1.format(data.otherincome),
                      ),
                      InvoiceItem(
                          description: data.friendlist1.isEmpty
                              ? \"[n/a]\"
                              : \"[\" +
                                  data.friendlist1 +
                                  \", \" +
                                  data.friendlist2 +
                                  \"]\",
                  
                          unitPrice: \"\"),
                          InvoiceItem(
                        description:
                            AppLocalizations.of(context)!.translate(\'ndi\')!,

                
                        unitPrice: AppLocalizations.of(context)!
                                .translate(\'currency\')! +
                            oCcy1.format(data.ndi),
                      ),
                    ],
                  );

                  final pdfFile = await PdfInvoiceApiDsr.generate(invoice);
                  PdfApi.openFile(pdfFile);
                },
              ),

PdfInvoiceApiDsr.dart(部分)

import \'../api/pdf_api.dart\';
import \'../model/customer.dart\';
import \'../model/invoice.dart\';
import \'../model/supplier.dart\';
import \'../utils.dart\';
import \'package:pdf/pdf.dart\';
import \'package:pdf/widgets.dart\' as pw;
import \'package:pdf/widgets.dart\';

int runonceforprinting = 1;
final pdf = pw.Document();

final imageA = PdfImage.file(
  pdf.document,
  bytes: File(\'assets/icon/icon2.png\').readAsBytesSync(),
);
var profileImage;

class PdfInvoiceApiDsr {
  static Future<File> generate(Invoice invoice) async {
    profileImage = pw.MemoryImage(
      (await rootBundle.load(\'assets/icon/icon2.png\')).buffer.asUint8List(),
    );
   

    pdf.addPage( <----this error from here, it tells the error :  the _paint has been saved!..
      pw.MultiPage(
        build: (context) => [
          buildHeader(invoice),
          SizedBox(height: 0.05 * PdfPageFormat.cm),
          buildTitle(invoice),
       
          buildInvoice(invoice),
        
        ],
        footer: (context) => buildFooter(invoice),
      ),
    );

……

PDFAPI

class PdfApi {
  static Future<File> saveDocument({
    required String name,
    required Document pdf,
  }) async {
    final bytes = await pdf.save();

    final dir = await getApplicationDocumentsDirectory();
    final file = File(\'${dir.path}/$name\');

    file.writeAsBytesSync(bytes);

    return file;
  }

  static Future openFile(File file) async {
    final url = file.path;

    await OpenFile.open(url);
  }
}
  • 你设法解决了这个问题吗?我有完全相同的问题...

标签: flutter pdf printing


【解决方案1】:

我有同样的问题,但我是这样解决的 尝试在你的方法generate(Invoice invoid)中添加final pdf = pw.Document(),这样当你离开页面时,你的pdf文件也会被删除,你总是会创建一个新的pdf文件

所以:

class PdfInvoiceApiDsr {
  static Future<File> generate(Invoice invoice) async {
   profileImage = pw.MemoryImage(
    (await rootBundle.load('assets/icon/icon2.png')).buffer.asUint8List(),
   );
   final pdf = pw.Document()


pdf.addPage( <----this error from here, it tells the error :  the _paint has been saved!..
  pw.MultiPage(
    build: (context) => [
      buildHeader(invoice),
      SizedBox(height: 0.05 * PdfPageFormat.cm),
      buildTitle(invoice),
   
      buildInvoice(invoice),
    
    ],
    footer: (context) => buildFooter(invoice),
  ),
);`

【讨论】:

    猜你喜欢
    • 2021-03-04
    • 2021-03-27
    • 2023-01-24
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2020-11-24
    • 2020-04-22
    • 2020-12-29
    相关资源
    最近更新 更多