我正在尝试用flutter Web中的Pdf包在flutter中生成Pdf。在这样做的过程中,我发现了一个使用此代码的flutter web解决方案。。
Uint8List bytes = await pdf.save() ;
final blob = html.Blob([bytes], 'application/pdf');
final url = html.Url.createObjectUrlFromBlob(blob);
html.window.open(url, "_blank");
html.Url.revokeObjectUrl(url);
这段代码在本地主机上运行良好,但没有在web主机上运行。请帮助
我的第一个答案被删除了,所以我会转发它。
下载文件如下:https://stackoverflow.com/a/60614367/18386517.
如果你只想在应用程序中打开PDF文件,请尝试pdfx包。这里有一个例子:
import 'dart:async';
import 'dart:typed_data';
import 'package:pdfx/pdfx.dart';
import 'package:flutter/material.dart';
class PdfLabPage extends StatefulWidget {
final String name;
final FutureOr<Uint8List> content;
const PdfLabPage({Key? key, required this.name, required this.content}) : super(key: key);
@override
State<PdfLabPage> createState() => _PdfLabPageState();
}
class _PdfLabPageState extends State<PdfLabPage> {
late PdfControllerPinch pdfController;
@override
void initState() {
pdfController = PdfControllerPinch(
document: PdfDocument.openData(widget.content)
);
super.initState();
}
@override
void dispose() {
pdfController.dispose();
super.dispose();
}
Widget pdfView() => PdfViewPinch(
controller: pdfController ,
onDocumentLoaded: (msg) {print(msg.toString());},
onDocumentError: (error) { print(error.toString());}
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.name),
),
body:
Center(
child: pdfView(),
),
);
}
}
我使用从网上获得了PDF文件的内容
var url = "..."
final file = await http.get(Uri.parse(url));
final content = file.bodyBytes;
但您可以从资产(Android、Ios、MacO、Web(加载:
final document = await PdfDocument.openAsset('assets/sample.pdf')
来自文件(Android,Ios,MacO(:
final document = await PdfDocument.openFile('path/to/file/on/device')
来自数据(Android、Ios、MacO、Web(:
final document = await PdfDocument.openData((FutureOr<Uint8List>) data)