0

0

Deno 环境下从 URL 获取 PDF 并提取文本的实践指南

霞舞

霞舞

发布时间:2025-07-23 15:44:02

|

816人浏览过

|

来源于php中文网

原创

deno 环境下从 url 获取 pdf 并提取文本的实践指南

本教程旨在指导开发者如何在 Deno 环境中从远程 URL 获取 PDF 文件并高效提取其文本内容。我们将首先指出使用 pdf-lib 进行文本提取的常见误区及其局限性,随后重点介绍并演示如何利用 Deno 对 npm 模块的兼容性,通过 pdf-parse 库实现可靠的 PDF 文本解析功能,提供完整的示例代码和注意事项,帮助您在 Deno 应用中顺利处理 PDF 数据。

在现代 Web 服务和边缘函数(如 Supabase Edge Functions)中,处理来自外部 URL 的 PDF 文件并提取其文本内容是一项常见的需求。然而,在 Deno 这样的运行时环境中,寻找一个稳定且功能完备的 PDF 处理库可能会遇到挑战。

常见误区:pdf-lib 的局限性

许多开发者在 Deno 中尝试处理 PDF 时,可能会自然而然地考虑使用 pdf-lib。pdf-lib 是一个功能强大的库,主要用于创建、修改和签名 PDF 文档。它提供了加载 PDF、获取页面、甚至处理表单字段(AcroForm)的能力。然而,一个常见的误区是期望 pdf-lib 能够直接支持任意 PDF 内容的通用文本提取。

例如,以下尝试使用 pdf-lib 提取文本的代码段:

import { PDFDocument } from 'https://cdn.skypack.dev/pdf-lib';

async function fetchPDF(url: string): Promise {
    const response = await fetch(url);
    const data = await response.arrayBuffer();
    return new Uint8Array(data);
}

async function readPDFText(url: string): Promise {
    const pdfBytes = await fetchPDF(url);
    const pdfDoc = await PDFDocument.load(pdfBytes);
    const pages = pdfDoc.getPages();

    let text = '';
    for (const page of pages) {
        // 这里的 .extractText() 或 .getTextContent() 方法并不存在或不支持通用文本提取
        // 尝试调用会引发 TypeError: .extractText is not a function
        // const content = await page.extractText();
        // text += content;
    }

    return text;
}

// 实际使用时,上述尝试会遇到 TypeError
// const pdfUrl = 'YOUR_PDF_URL_HERE';
// const pdfText = await readPDFText(pdfUrl);
// console.log(pdfText);

如上述代码所示,尝试调用 page.extractText() 或 page.getTextContent() 方法时,通常会遇到 TypeError: .extractText() is not a function 错误。这是因为 pdf-lib 的设计目标并非通用文本解析,其官方文档和社区讨论也明确指出,它目前不支持从文档中解析纯文本内容(除了 AcroForm 字段)。对于通用文本提取,官方建议考虑使用如 PDF.js 等专门的解析库。

解决方案:利用 pdf-parse 进行文本提取

Deno 运行时的一大优势是其对 npm 模块的良好兼容性,允许我们直接通过 npm: 协议导入并使用绝大多数 npm 包。对于 PDF 文本提取任务,pdf-parse 是一个轻量级且高效的解决方案,它底层依赖于 PDF.js,能够可靠地从 PDF 文件中解析出文本内容。

磁力开创
磁力开创

快手推出的一站式AI视频生产平台

下载

以下是如何在 Deno 中使用 pdf-parse 从 URL 获取 PDF 并提取文本的完整示例:

import pdf from 'npm:pdf-parse/lib/pdf-parse.js';

/**
 * 从指定 URL 获取 PDF 文件并提取其文本内容。
 * @param pdfUrl PDF 文件的 URL。
 * @returns 提取到的文本内容。
 */
async function extractTextFromPDF(pdfUrl: string): Promise {
    try {
        // 1. 从 URL 获取 PDF 文件的二进制数据
        const response = await fetch(pdfUrl);
        if (!response.ok) {
            throw new Error(`Failed to fetch PDF from ${pdfUrl}: ${response.statusText}`);
        }
        const arrayBuffer = await response.arrayBuffer();

        // 2. 使用 pdf-parse 处理二进制数据并提取文本
        // pdf-parse 函数接受 ArrayBuffer 或 Buffer,并返回包含文本等信息的对象
        const data = await pdf(arrayBuffer);

        // 3. 返回提取到的文本内容
        return data.text;
    } catch (error) {
        console.error("Error extracting text from PDF:", error);
        throw error; // 重新抛出错误以便调用方处理
    }
}

// 示例用法:
const pdfUrl = 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf'; // 替换为你的 PDF URL

try {
    console.log(`正在从 ${pdfUrl} 提取文本...`);
    const pdfText = await extractTextFromPDF(pdfUrl);
    console.log("提取到的 PDF 文本内容:");
    console.log(pdfText);
} catch (e) {
    console.error("无法提取 PDF 文本:", e);
}

代码解析:

  1. import pdf from 'npm:pdf-parse/lib/pdf-parse.js';: 这是 Deno 中导入 npm 包的标准方式。pdf-parse 的主入口文件位于其 lib 目录下。
  2. fetch(pdfUrl): 使用 Deno 内置的 fetch API 从指定的 URL 获取 PDF 文件的响应。
  3. response.arrayBuffer(): 将响应体转换为 ArrayBuffer,这是 pdf-parse 所需的二进制数据格式。
  4. await pdf(arrayBuffer): 调用 pdf-parse 库的默认导出函数,传入 ArrayBuffer。该函数会异步解析 PDF 内容,并返回一个包含 text 属性(即提取到的文本)的对象。
  5. return data.text: 从解析结果中获取并返回纯文本内容。

注意事项与最佳实践

  • Deno 版本兼容性: 确保您的 Deno 版本支持 npm: 协议(通常较新版本都支持)。
  • 错误处理: 在实际应用中,务必对网络请求(fetch)和 PDF 解析过程(pdf-parse)进行充分的错误处理,例如检查 response.ok,捕获潜在的解析异常。
  • 性能考量: 对于非常大的 PDF 文件,文本提取可能需要一定的时间和内存。在边缘函数等资源受限的环境中,应评估其性能影响。
  • 文本格式与布局: pdf-parse 提取的文本通常是原始的、不带格式的文本流。PDF 的复杂布局(如多列、图表中的文本)可能会导致提取的文本顺序或可读性不佳。如果需要更高级的文本结构保留,可能需要更复杂的解析逻辑或专门的工具
  • 替代方案: 如果 pdf-parse 无法满足特定需求(例如,需要解析 PDF 内部的图像文本、更精确的文本定位信息),可以考虑直接集成或调用基于 PDF.js 的更底层解析逻辑,或者探索其他专门的 OCR 解决方案。

总结

在 Deno 环境中从 URL 获取 PDF 并提取文本,关键在于选择正确的库。尽管 pdf-lib 在 PDF 操作方面表现出色,但它并非为通用文本提取而设计。通过利用 Deno 对 npm 模块的兼容性,pdf-parse 提供了一个简单而有效的解决方案,能够帮助开发者轻松实现 PDF 文本内容的自动化提取。遵循本文提供的示例和注意事项,您将能够高效地在 Deno 应用中处理 PDF 数据。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1409

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

381

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

931

2025.04.24

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

512

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5306

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

481

2023.09.01

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.2万人学习

Pandas 教程
Pandas 教程

共15课时 | 1.0万人学习

ASP 教程
ASP 教程

共34课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号