未处理的异常:“TooManyPagesException”实例#0 MultiPage.generate

问题描述 投票:0回答:1

更新: 此错误仅在 IOS 上出现。 我不知道为什么,但它在 Android 上运行良好。 我在使用 pdf 包的 Flutter 中遇到了一个问题,问题是: 小组件无法适应页面,因为其高度 (823.408) 超过页面高度 (728.5039370078739)。您可能需要 SpanningWidget 或使用单页面布局。

然后我尝试将我的 pdf 内容扭曲到 SpanningWidget,即 Wrap 小部件。但在我收到另一个错误后,这似乎是一个新错误。

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Instance of 'TooManyPagesException' #0      MultiPage.generate (package:pdf/src/widgets/multi_page.dart:251:9) #1      Document.addPage (package:pdf/src/widgets/document.dart:117:10) #2      _QuillPageState.generatePdf (package:daiaryapp/pages/addDairyPage/quill_page.dart:76:9) <asynchronous suspension> #3      _QuillPageState.build.<anonymous closure>.<anonymous closure> (package:daiaryapp/pages/addDairyPage/quill_page.dart:320:48) <asynchronous suspension>

这是我的代码:

pdf.addPage(pw.MultiPage(
      build: (pw.Context context) {
        final content = <pw.Widget>[];

        content.add(
          pw.Center(
            child: pw.Text(
              post.dairyName.toString(), // Replace with your desired title
              style: customTitle,
            ),
          ),
        );

        int itemsPerPage = 8;

        for (var i = 0; i < deltaData['ops'].length; i++) {
          final op = deltaData['ops'][i];

          if (op.containsKey('insert')) {
            if (op['insert'] is String) {
              final lines = (op['insert'] as String).split('-');

              for (var line in lines) {
                final textWidget = pw.Padding(
                  padding: pw.EdgeInsets.all(1.0),
                  child: pw.Text(
                    line.trim(), // Trim to remove extra spaces
                    style: customTextStyle, // Apply custom text style here
                  ),
                );

                content.add(textWidget);
              }
            } else if (op['insert'] is Map &&
                op['insert'].containsKey('image')) {
              final imageData = op['insert']['image'].split(',')[1];
              final Uint8List decodedImage = base64Decode(imageData);

              final imageWidget = pw.Padding(
                padding: pw.EdgeInsets.all(1.0),
                child: pw.Image(
                  pw.MemoryImage(
                    decodedImage,
                  ),
                  fit: pw.BoxFit.cover,
                  height: 245.0,
                ),
              );

              content.add(imageWidget);
            }
          }

          if (i > 0 && (i + 1) % itemsPerPage == 0) {
            content.add(pw.Container(width: 1.0, height: 1.0));
          }
        }

        // return content;
        return [
          pw.Wrap(
            children: content,
          ),
        ];
      },
    ));

我尝试了多种方法,包括 Stackoverflow 问题、GPT 和 GitHub 问题,但没有得到任何帮助

flutter dart pdf pdf-generation dart-pdf
1个回答
0
投票

基本上,列或换行小部件必须是父小部件,否则需要整页才能自行展开。当内容很长时,列内的页面或换行会出现此错误。不要使用 Wrap 作为您的子小部件。

© www.soinside.com 2019 - 2024. All rights reserved.