从nodeJS阅读PDF文档属性

时间:2019-01-09 12:00:00

标签: node.js pdf metadata

我正在尝试从nodeJS读取PDF文档属性。我找不到用于读取文档属性的任何节点模块。我可以使用file-metadata来读取文件元数据,但它仅提供基本属性。我想阅读诸如文档限制摘要之类的属性(请检查附件中的图像以供参考。enter image description here

3 个答案:

答案 0 :(得分:4)

受@DietrichvonSeggern的suggestion的启发,我编写了小节点脚本。

const { spawnSync } = require('child_process');

const { stdout } = spawnSync('exiftool',
  ['-b', '-UserAccess', 'test.pdf'],
  { encoding: 'ascii' });
const bits = (parseInt(stdout, 10) || 0b111111111110);

const perms = {
  'Print': 1 << 2,
  'Modify': 1 << 3,
  'Copy': 1 << 4,
  'Annotate': 1 << 5,
  'Fill forms': 1 << 8,
  'Extract': 1 << 9,
  'Assemble': 1 << 10,
  'Print high-res': 1 << 11
};

Object.keys(perms).forEach((title) => {
  const bit = perms[title];
  const yesno = (bits & bit) ? 'YES' : 'NO';
  console.log(`${title} => ${yesno}`);
});

它将打印如下内容:

Print => YES
Modify => NO
Copy => NO
Annotate => NO
Fill forms => NO
Extract => NO
Assemble => NO
Print high-res => YES

您应该在系统中安装exiftool,并在此脚本中添加所需的错误检查。

ExifTool UserAccess tag reference


稍作修改:

const perms = {
  'Print': 1 << 2,
  'Modify': 1 << 3,
  'Copy': 1 << 4,
  'Annotate': 1 << 5,
  'FillForms': 1 << 8,
  'Extract': 1 << 9,
  'Assemble': 1 << 10,
  'PrintHighRes': 1 << 11
};

const access = {};
Object.keys(perms).forEach((perm) => {
  const bit = perms[perm];
  access[perm] = !!(bits & bit);
});

console.log(access);

会产生:

{
  Print: true,
  Modify: false,
  Copy: false,
  Annotate: false,
  FillForms: false,
  Extract: false,
  Assemble: false,
  PrintHighRes: true
}

答案 1 :(得分:3)

您是否考虑过使用exiftool?您可能必须将其集成到nodejs中,但是在fasics中,它或多或少地提供了您正在寻找的所有数据。

答案 2 :(得分:0)

如果找不到用于node.js的PDF库,则可能需要考虑从node.js调用外部库。有关如何从node.js调用C ++库的信息,请参见this post

我公司提供的PDF Library可以轻松读取文档的元数据属性,例如。