NodeJS读取PDF文档属性:需获取文档限制摘要
解决Node.js读取PDF文档限制属性的方案
我之前也碰到过类似的需求,要读取PDF里的文档限制这类深层属性,file-metadata确实只能搞定基础文件信息,给你推荐几个靠谱的Node.js模块,亲测能用:
1. pdf-lib(推荐,功能全面)
这个模块不仅能读取PDF元数据,还支持修改PDF,处理权限相关的属性很顺手。
首先安装:
npm install @pdf-lib/core
然后用以下代码读取文档限制:
const { PDFDocument } = require('@pdf-lib/core'); const fs = require('fs'); async function readPDFRestrictions(pdfPath) { const pdfBytes = fs.readFileSync(pdfPath); const pdfDoc = await PDFDocument.load(pdfBytes); // 获取文档权限信息 const permissions = pdfDoc.getPermissions(); console.log('文档限制摘要:'); console.log(`是否允许打印: ${permissions.canPrint()}`); console.log(`是否允许修改内容: ${permissions.canModify()}`); console.log(`是否允许复制内容: ${permissions.canCopy()}`); console.log(`是否允许添加注释: ${permissions.canAnnotate()}`); } readPDFRestrictions('./your-document.pdf');
2. pdf-parse(轻量解析)
如果只需要读取元数据和权限,这个轻量模块足够用,不需要额外的依赖。
安装:
npm install pdf-parse
示例代码:
const pdfParse = require('pdf-parse'); const fs = require('fs'); async function getPDFPermissions(pdfPath) { const dataBuffer = fs.readFileSync(pdfPath); const pdfData = await pdfParse(dataBuffer); // 权限信息通常在Info对象的Permissions字段里 if (pdfData.info && pdfData.info.Permissions) { const permissions = pdfData.info.Permissions; console.log('文档权限字段:', permissions); // 可以根据权限值解析具体限制,比如不同的数字对应不同权限 } } getPDFPermissions('./your-document.pdf');
3. hummusjs(底层操作)
这个模块偏向底层PDF操作,适合需要更精细控制的场景,能直接读取PDF的字典信息。
安装:
npm install hummus
示例代码:
const hummus = require('hummus'); const fs = require('fs'); function readPDFRestrictionsHummus(pdfPath) { const pdfReader = hummus.createReader(pdfPath); const catalog = pdfReader.getCatalogDictionary(); const permissionsDict = catalog.get('Perms'); if (permissionsDict) { console.log('文档限制详情:'); console.log(`打印权限: ${permissionsDict.get('Print')}`); console.log(`修改权限: ${permissionsDict.get('Modify')}`); console.log(`复制权限: ${permissionsDict.get('Copy')}`); } } readPDFRestrictionsHummus('./your-document.pdf');
注意事项
- 加密的PDF需要先解密才能读取这些属性,部分模块支持传入密码进行解密操作;
- 不同PDF的权限字段命名可能略有差异,实际使用时可以根据PDF的结构调整代码。
内容的提问来源于stack exchange,提问作者naresh
相关产品推荐
相关产品推荐

