我是新的颤振和面对一些问题时,遵循PDF发票教程。对于第一次打印PDF,一切都很好,但是对于第二次尝试,在添加/编辑一些数据之后,PDF文件仍然是第一个PDF,并且我得到了标题上的错误。
未处理的异常:‘package:pdf/src/widget/document.dart’:失败的断言:第117行pos 12:‘!_画图’:文档已经保存。
下面是我代码的一部分
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);
}
}
发布于 2022-08-10 19:34:27
我也遇到了同样的问题,但我这样解决了它--尝试在您的方法final pdf = pw.Document()
中添加generate(Invoice invoid)
,所以当您离开页面时,您的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),
),
);`
https://stackoverflow.com/questions/72824582
复制相似问题