【问题标题】:How can i show pdf in base64 format in flutter我如何在颤动中以base64格式显示pdf
【发布时间】:2020-05-29 01:07:01
【问题描述】:

我在 postgresql 中有一个表,其中有一个带有 base64 格式的 pdf 文件的字段。当我从颤振中得到它时,如何用 pdf 查看器显示它?,有人做过吗??

感谢您的帮助

【问题讨论】:

  • 您想知道如何将其解码回pdf格式或解码并显示?
  • 你好 Antonin,我想解码和显示。 Mi pdf 文件在 postgresql 上的表中是 base64 格式,

标签: flutter pdf base64 pdf-viewer


【解决方案1】:

在 pubspec.yaml 添加如下依赖:

dependencies:
  flutter_full_pdf_viewer: ^1.0.6 # for pdf

然后在Android Studio终端运行flutter pub get更新依赖。

创建文件'pdfBase64Viewer.dart:

import 'dart:async'; // asynchroneous function (await)
import 'dart:io'; // write the file on user's phone
import 'dart:convert'; // handle base64 decoding
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_full_pdf_viewer/full_pdf_viewer_scaffold.dart';
import 'package:path_provider/path_provider.dart';


class PdfBase64Viewer extends StatefulWidget {
  final String url;

  const PdfBase64Viewer(String this.url);
  @override
  _PdfBase64ViewerState createState() => new _PdfBase64ViewerState();
}

class _PdfBase64ViewerState extends State<PdfBase64Viewer> {
  String pathPDF = "";

  @override
  void initState() {
    super.initState();
    createFileOfPdfUrl(widget.url).then((f) {
      setState(() {
        pathPDF = f.path;
        print(pathPDF);
      });
    });
  }


  Future<File> createFileOfPdfUrl(is_base_64) async {
    final filename = widget.url.substring(widget.url.lastIndexOf("/") + 1);

    var request = await HttpClient().getUrl(Uri.parse(widget.url));
    var response = await request.close();
    var bytes = await consolidateHttpClientResponseBytes(response);
    var base64String = utf8.decode(bytes); 
    var decodedBytes = base64Decode(base64String.replaceAll('\n', ''));

    String dir = (await getApplicationDocumentsDirectory()).path;
    File file = new File('$dir/$filename');
    await file.writeAsBytes(decodedBytes.buffer.asUint8List());

    return file;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Plugin example app')),
      body: Center(
        child: RaisedButton(
          child: Text("Open PDF"),
          onPressed: () => Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => PDFScreen(pathPDF)),
          ),
        ),
      ),
    );
  }
}

class PDFScreen extends StatelessWidget {
  String pathPDF = "";
  PDFScreen(this.pathPDF);

  @override
  Widget build(BuildContext context) {
    return PDFViewerScaffold(
        appBar: AppBar(
          title: Text("Document"),
          actions: <Widget>[
            IconButton(
              icon: Icon(Icons.share),
              onPressed: () {},
            ),
          ],
        ),
        path: pathPDF);
  }
}

您可以调整上述类,以便将您从数据库中获得的字符串值分配给变量 base64String。

您可以通过以下方式使用它:

import 'pdfBase64Viewer.dart';

(...)
child: PdfBase64Viewer("https://filebin.net/qmvmxbgn6pzgkbzb/sample.base64?t=7g5s9rwr") // url of your base64 file
(...)

您可能需要查看以下文档:

【讨论】:

  • 很抱歉之前没有回答,但我个人问题很复杂,我会试着告诉你它是怎么回事
  • 我的朋友,最后我设法使用 base64 中的 pdf 图像从 json 读取并能够在应用程序中将其显示为 PDF 文件,您的帮助非常好,我非常感谢您帮助,非常感谢
  • 我不太愿意使用,因为这个包最后一次更新是在 2019 年。所以没有更多的更新
  • 你可以适应另一个更新的包没关系。我在这个包中没有股份;)
  • 你找到了更新的包吗?
猜你喜欢
  • 2019-11-18
  • 1970-01-01
  • 2020-04-13
  • 2021-11-22
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
相关资源
最近更新 更多