如何在Flutter中解码base64 PDF字符串?

时间:2019-04-09 17:47:30

标签: node.js pdf flutter base64

我知道有一个名为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应用中显示它。

3 个答案:

答案 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));

pdfimage插件似乎很适合您显示pdf的需求。

代码应大致如下:

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