Flutter PDF文本读取插件read_pdf_text的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter PDF文本读取插件read_pdf_text的使用

read_pdf_text简介

read_pdf_text是一个用于解析PDF文档中的文本并将其作为字符串返回的Flutter插件。

平台支持

Android

在Android平台上,该插件使用了由Tom Roush修改过的开源库PDFbox

iOS

iOS平台上的插件使用PDFKit来解析PDF文档中的文本。需要注意的是,它要求iOS版本11或更高。

注意:如果遇到错误“Could not find or use auto-linked library ‘swiftObjectiveC’”,可以参考这个解决方案

入门指南

此插件提供了三个主要函数:

  • getPDFtext(path):从PDF文件中获取文本,返回一个字符串。
  • getPDFtextPaginated(path):以分页形式返回PDF文件中的文本,每个页面的文本作为一个列表项。
  • getPDFlength(path):返回PDF文档的总页数(整数)。

路径参数是您想要解析的PDF文件的文件路径。在示例中,我使用了file_picker包来获取PDF文件的路径。

示例代码

以下是一个完整的示例demo,展示了如何使用read_pdf_text插件:

import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
import 'package:read_pdf_text/read_pdf_text.dart';

void main() {
  runApp(
    MaterialApp(
      home: PDFReaderExample(),
    ),
  );
}

class PDFReaderExample extends StatefulWidget {
  @override
  _PDFReaderExampleState createState() => _PDFReaderExampleState();
}

class _PDFReaderExampleState extends State<PDFReaderExample> {
  String _pdfText = '';
  List<String> _paginatedPdfText = [];
  int _pdfLength = 0;

  Future<void> _pickAndReadPDF() async {
    FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['pdf']);
    if (result != null) {
      String path = result.files.single.path!;
      
      // 获取PDF文本
      try {
        String text = await ReadPdfText.getPDFtext(path);
        setState(() {
          _pdfText = text;
        });
      } catch (e) {
        print('Failed to get PDF text.');
      }

      // 获取分页PDF文本
      try {
        List<String> textList = await ReadPdfText.getPDFtextPaginated(path);
        setState(() {
          _paginatedPdfText = textList;
        });
      } catch (e) {
        print('Failed to get paginated PDF text.');
      }

      // 获取PDF长度
      try {
        int length = await ReadPdfText.getPDFlength(path);
        setState(() {
          _pdfLength = length;
        });
      } catch (e) {
        print('Failed to get PDF length.');
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Read PDF Text Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            ElevatedButton(
              onPressed: _pickAndReadPDF,
              child: Text('Pick and Read PDF'),
            ),
            SizedBox(height: 20),
            Text('PDF Text:\n$_pdfText'),
            SizedBox(height: 20),
            Text('Paginated PDF Text:\n${_paginatedPdfText.join('\n---\n')}'),
            SizedBox(height: 20),
            Text('PDF Length: $_pdfLength pages'),
          ],
        ),
      ),
    );
  }
}

通过上述代码,您可以创建一个简单的Flutter应用程序,允许用户选择PDF文件并读取其内容。希望这对您有所帮助!如果您有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter PDF文本读取插件read_pdf_text的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter PDF文本读取插件read_pdf_text的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 read_pdf_text 插件在 Flutter 中读取 PDF 文本的代码示例。这个插件允许你从 PDF 文件中提取文本内容。

首先,确保你的 Flutter 项目已经配置好了,然后在 pubspec.yaml 文件中添加 read_pdf_text 依赖:

dependencies:
  flutter:
    sdk: flutter
  read_pdf_text: ^latest_version # 请替换为最新的版本号

运行 flutter pub get 命令来安装依赖。

接下来,在你的 Dart 文件中使用 read_pdf_text 插件。以下是一个完整的示例代码,展示如何读取 PDF 文件并显示其内容:

import 'package:flutter/material.dart';
import 'package:read_pdf_text/read_pdf_text.dart';
import 'dart:io';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('PDF Text Reader'),
        ),
        body: Center(
          child: PdfTextReaderExample(),
        ),
      ),
    );
  }
}

class PdfTextReaderExample extends StatefulWidget {
  @override
  _PdfTextReaderExampleState createState() => _PdfTextReaderExampleState();
}

class _PdfTextReaderExampleState extends State<PdfTextReaderExample> {
  String pdfText = '';

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: _pickPdf,
          child: Text('Select PDF File'),
        ),
        SizedBox(height: 20),
        Expanded(
          child: SingleChildScrollView(
            child: Text(
              pdfText,
              style: TextStyle(fontSize: 16),
            ),
          ),
        ),
      ],
    );
  }

  Future<void> _pickPdf() async {
    FilePickerResult? result = await FilePicker.platform.pickFiles(
      type: FileType.custom,
      allowedExtensions: ['pdf'],
    );

    if (result != null) {
      File file = File(result.files.single.path!);
      pdfText = await ReadPdfText.getTextFromPdf(file.path);
      setState(() {});
    }
  }
}

在这个示例中,我们使用了 file_picker 插件来选择 PDF 文件。你需要在 pubspec.yaml 文件中添加 file_picker 依赖:

dependencies:
  flutter:
    sdk: flutter
  read_pdf_text: ^latest_version # 请替换为最新的版本号
  file_picker: ^latest_version # 请替换为最新的版本号

然后运行 flutter pub get 命令来安装 file_picker 依赖。

别忘了在 Android 和 iOS 项目中进行必要的权限配置,以允许文件选择。

Android 配置

android/app/src/main/AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

iOS 配置

ios/Runner/Info.plist 文件中添加以下权限描述:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>

并且确保在 iOS 项目的 Info.plist 中配置了 NSPhotoLibraryUsageDescriptionNSMicrophoneUsageDescription(如果需要)。

这样,你就可以在 Flutter 应用中选择 PDF 文件并读取其中的文本了。

回到顶部