Net*_*aez 7 pdf base64 node.js flutter
我知道有一个名为 dart:convert 的包可以让我解码 Base64 图像。但显然,它不适用于 pdf 文件。如何在 Flutter 中解码 Base64 PDF 文件?
我想将其存储在 Firebase Storage 中(我知道如何做),但我需要 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 });
});
});
Run Code Online (Sandbox Code Playgroud)
如您所见,它以 base64 字符串形式返回 pdf。
现在,我在 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"]);
});
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我在变量“pdf”中有 PDF。但我不知道如何解码它以下载 pdf 或在我的 Flutter 应用程序中显示它。
小智 13
@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(() {});
}
Run Code Online (Sandbox Code Playgroud)
所需库: 1. open_file 2. path_provider 3. pdf
这应该将base64
编码的 pdf 数据转换为字节数组。
import 'packages:dart/convert.dart';
List<int> pdfDataBytes = base64.decode(pdfBase64)
.map((number) => int.parse(number));
Run Code Online (Sandbox Code Playgroud)
代码应该大致是这样的:
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
...
Run Code Online (Sandbox Code Playgroud)