You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Web中PDF字节文本提取方案及pdf-parse编译问题求助

Flutter Web 提取PDF字节文本的替代方案及TS编译问题解决

一、解决pdf-parse的TypeScript编译错误

你遇到的TS1259错误是因为pdf-parse的类型声明使用了export =语法,TypeScript默认不支持这种语法的默认导入,有两种解决方式:

方式1:调整导入语句

把原来的命名导入改成require风格的导入:

import PdfParse = require('pdf-parse');

async function extractTextFromPdf(pdfBytes: Uint8Array): Promise<string> {
    try {
        const pdfData = Buffer.from(pdfBytes);
        const data = await PdfParse(pdfData);
        return data.text;
    } catch (error) {
        console.error('提取文本出错:', error);
        throw new Error('提取文本失败');
    }
}

方式2:启用ES模块互操作性编译选项

编译时添加--esModuleInterop参数,命令改为:

tsc --target ES5 --esModuleInterop extractPdfText.ts

或者在项目的tsconfig.json里配置:

{
  "compilerOptions": {
    "target": "ES5",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  }
}

之后直接运行tsc就能正常编译。

二、完整的Flutter Web实现流程

1. 编译JS文件

按照上面的方法修正代码后,编译得到extractPdfText.js,把它放到Flutter项目的web目录下。

2. 在Flutter中调用JS函数

在web/index.html里引入编译好的JS文件:

<script src="extractPdfText.js"></script>

然后在Dart代码中通过dart:js调用:

import 'dart:js' as js;
import 'dart:typed_data';

Future<String> extractPdfText(Uint8List pdfBytes) async {
  try {
    final result = await js.promiseToFuture<String>(
      js.context.callMethod('extractTextFromPdf', [pdfBytes]),
    );
    return result;
  } catch (e) {
    throw Exception('提取PDF文本失败: $e');
  }
}

三、其他开源替代方案

  • pdf.js: Mozilla官方开源的PDF处理库,功能更全面,除了文本提取还支持PDF渲染等,同样可以通过JS interop在Flutter Web中调用它的API实现文本提取。
  • 注意: 像pdf_text这类Dart包在Web平台兼容性有限,优先推荐JS interop结合开源JS库的方案。

内容的提问来源于stack exchange,提问作者Muhammad Hamza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:19:55