我知道有一个名为dart:convert的程序包,它可以让我解码base64图像。但显然,它不适用于pdf文件。如何在Flutter中解码base64 PDF文件。
我想将其存储在Firebase Storage中(我知道该怎么做),但是我需要File变量来完成它。
我有一个用js节点编写的Web服务,其中有一个POST路由。在那里,我创建了一个pdf文件,并将其编码为base64。响应为base64字符串,请查看代码。
router.post('/pdf', (req, res, next) => {
//res.send('PDF');
const fname = req.body.fname;
const lname = req.body.lname;
var documentDefinition = {
content: [ write your pdf with pdfMake.org ],
styles: { write your style };
const pdfDoc = pdfMake.createPdf(documentDefinition);
pdfDoc.getBase64((data) => {
res.send({ "base64": data });
});
});
如您所见,它返回pdf作为base64字符串。
现在,在Flutter中,我这样写:
http.post("https://mypostaddreess.com",body: json.encode({"data1":"data"}))
.then((response) {
print("Response status: ${response.statusCode}");
print("Response body: ${response.body}");
var data = json.decode(response.body);
var pdf = base64.decode(data["base64"]);
});
}
如您所见,我在变量'pdf'中有PDF。但是我不知道如何解码才能下载pdf或在Flutter应用中显示它。
答案 0 :(得分:1)
我认为获取BufferArray并将其转换为pdf文件会更好。
从这里查看我的回答:Get pdf from blob data
答案 1 :(得分:0)
这应将base64
编码的pdf数据转换为字节数组。
import 'packages:dart/convert.dart';
List<int> pdfDataBytes = base64.decode(pdfBase64)
.map((number) => int.parse(number));
代码应大致如下:
import 'package:pdf/pdf.dart';
import 'package:image/image.dart';
...
Image img = decodeImage(pdfDataBytes);
PdfImage image = PdfImage(
pdf,
image: img.data.buffer.asUint8List(),
width: img.width,
height: img.height);
// Display it somehow
...
答案 2 :(得分:0)
@SwiftingDuster
添加了一些内容,也许除了解码外,还需要创建一个pdf文件并打开它。
createPdf() async {
var bytes = base64Decode(widget.base64String.replaceAll('\n', ''));
final output = await getTemporaryDirectory();
final file = File("${output.path}/example.pdf");
await file.writeAsBytes(bytes.buffer.asUint8List());
print("${output.path}/example.pdf");
await OpenFile.open("${output.path}/example.pdf");
setState(() {});
}
所需的库: 1. open_file 2. path_provider 3. pdf