NodeJS环境下能否搭配axios直接使用pdf-table-extractor处理远程PDF
问题解答
首先明确:该需求可以实现,你遇到的报错是库的入参校验逻辑和调用方式不规范导致的。
报错翻译
原报错The argument 'path' must be a string or Uint8Array without null bytes. Received Uint8Array(118456)的中文含义为:
参数"path"必须是不包含空字节的字符串或Uint8Array,当前接收到的是长度为118456的Uint8Array
报错原因
- 你使用的
pdf-table-extractor版本对二进制入参的校验逻辑存在缺陷,会把PDF二进制格式中合法的0值误判为非法空字节,触发参数校验失败 - 你当前的调用方式缺少必填的成功/失败回调参数,该库本身不支持Promise调用,必须传入两个回调函数作为第二、第三入参
解决方案
方案1:临时文件中转(兼容性最高,无需修改依赖)
先把远程获取到的PDF内容写入本地临时文件,再传文件路径给提取库,代码示例:
const axios = require('axios') const fs = require('fs/promises') const pdf_table_extractor = require("pdf-table-extractor") async function extractPdfTable() { // 获取远程PDF二进制内容 const pdfRes = await axios.get(`你的PDF资源地址`, { responseType: 'arraybuffer' }) // 生成唯一临时文件路径,避免冲突 const tempPdfPath = `./temp_${Date.now()}.pdf` // 写入临时文件 await fs.writeFile(tempPdfPath, pdfRes.data) // 调用表格提取能力 pdf_table_extractor( tempPdfPath, // 成功回调 async (extractResult) => { console.log('表格提取完成', extractResult) // 提取完成后删除临时文件,释放磁盘空间 await fs.unlink(tempPdfPath) }, // 失败回调 async (err) => { console.error('表格提取失败', err) await fs.unlink(tempPdfPath) } ) } extractPdfTable()
方案2:内存直接处理(无需写入本地文件)
先升级配套依赖修复校验问题,直接传入Buffer格式的PDF内容即可,操作步骤:
- 执行命令安装兼容版本依赖:
npm install pdf-table-extractor pdfjs-dist@3.4.120 - 使用如下代码实现:
const axios = require('axios') const pdf_table_extractor = require("pdf-table-extractor") async function extractPdfTable() { const pdfRes = await axios.get(`你的PDF资源地址`, { responseType: 'arraybuffer' }) // 将ArrayBuffer转为Node.js Buffer,适配校验逻辑 const pdfBuffer = Buffer.from(pdfRes.data) pdf_table_extractor( pdfBuffer, (extractResult) => console.log('提取成功', extractResult), (err) => console.error('提取失败', err) ) } extractPdfTable()
内容的提问来源于stack exchange,提问作者Zan
相关产品推荐
相关产品推荐

