簡體   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