繁体   English   中英

如何在[Flutter]中打开PDF或word文档

[英]How to open and PDF or word document in the [Flutter]

问题很简单,我想使用 Flutter 通过默认应用程序打开任何 pdf 或 doc 文件。

考虑一个与我的 pdf 资产相关的凸起按钮,当用户按下它时,pdf 将通过 Acrobat 阅读器等打开。我不想使用任何 web_view。

Flutter 支持吗?

一个很好且简单的方法是open_file包,它允许您打开具有给定路径的文件。 它支持多种不同的文件类型:

import 'package:open_file/open_file.dart';

OpenFile.open("/sdcard/example.pdf");

您可以通过在网络浏览器中打开 google 文档来执行此操作:

在 pubspec.yaml 中,您需要:

url_launcher: ^0.4.2+5

包括:

import 'package:flutter/src/gestures/tap.dart';
import 'package:url_launcher/url_launcher.dart';

代码片段:

new RichText(
  text: new LinkTextSpan(
      url: 'http://docs.google.com/viewer?url=http://www.pdf995.com/samples/pdf.pdf',
      text: 'Show My Pdf'),
),

LinkTextSpan 类:

class LinkTextSpan extends TextSpan {
  LinkTextSpan({TextStyle style, String url, String text})
      : super(
      style: style,
      text: text ?? url,
      recognizer: new TapGestureRecognizer()
        ..onTap = () {
          launch(url);
        });
}

您可以为此使用url_launcher包。 只需将文档的path作为参数传递给launch()方法。

您可以使用 [ flutter_full_pdf_viewer 1.0.6 ] Dependencie

无需下载文件,使用包从 URL 打开: url_launcher

import 'package:url_launcher/url_launcher.dart';

_launchURL() async {
  const url = 'https://flutter.dev/exapmle.pdf';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}
class EmployeeViewModel {
  EmployeeModel _employeeModel = EmployeeModel();

   String fname;   
                                                                                                                              void downloadFile(BuildContext context, String fileUrl, String fileName, ProgressListener listener) async {

    String _filePath = '';

    if (Platform.isAndroid) {
      String _directory = await ExtStorage.getExternalStoragePublicDirectory(ExtStorage.DIRECTORY_DOWNLOADS);
      print(_directory);
      _filePath = '$_directory/$fileName';
      //todo getting file name here
      print("file name" + fileName);
      fname = fileName;
      print("file fname" + fname);
      //APIKey.FILE_NAME: fileName;
    } else if (Platform.isIOS) {
      Directory _directory = await getApplicationDocumentsDirectory();
      _filePath = '${_directory.path}/$fileName';

      print("file name" + fileName);
      //log(fileName);
      debugPrint(_directory.path);
      print("directory path" + _directory.path);
    }

    var response = await Dio().downloadUri(Uri().resolve(fileUrl), _filePath);

    if (response.statusCode == 200) {
      listener.isProcessing(false);
      AlertMessageDialog(context,  UtilString.downloadCompleted, UtilString.downloadCompletedMessage, UtilString.open, AlertMessageDialogActionHandler());
    } else {
      listener.isProcessing(false);
      UtilAction.showSnackBar(context, response.statusMessage);
    }
  }                                                                                                  class AlertMessageDialogActionHandler implements AlertMessageDialogListener {

  @override
  Future<void> onPositiveButtonClick() async {
    String _filePath = '';
    String fileName;
    String _directory = await ExtStorage.getExternalStoragePublicDirectory(ExtStorage.DIRECTORY_DOWNLOADS);
    //todo geeting right directory path here
    print("directory" + _directory);
    _filePath = '$_directory/$fileName';
    print("file path" + _filePath);
   // print("filename" + fileName);

    OpenFile.open("/storage/emulated/0/Download/GA55-Estimated-SHRIGOPAL-VERMA-2020-2021.pdf");  }}

暂无
暂无

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

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