繁体   English   中英

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

[英]How to decode base64 PDF string in Flutter?

我知道有一个名为 dart:convert 的包,它可以让我解码 base64 图像。 但显然,它不适用于 pdf 文件。 如何在 Flutter 中解码 base64 PDF 文件?

我想将它存储在 Firebase 存储中(我知道怎么做),但我需要 File 变量来做到这一点。

我有一个用 node js 编写的 Web 服务,我有一个 POST 路由。 在那里,我创建了一个 pdf 文件并将其编码为 base 64。响应是一个 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 应用程序中显示它。

@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

我认为最好获取 BufferArray 并将其转换为 pdf 文件。

从这里查看我的答案: 从 blob 数据中获取 pdf

这应该将base64编码的 pdf 数据转换为字节数组。

import 'packages:dart/convert.dart';

List<int> pdfDataBytes = base64.decode(pdfBase64)
  .map((number) => int.parse(number));

pdf图像插件似乎适合您显示 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
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM