关于PDF文件在网络托管中打开和下载flutter web



我正在尝试用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)

最新更新