Чтение свойств документа PDF из nodeJS - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь прочитать свойства документа PDF из nodeJS. Я не смог найти ни одного модуля узла для чтения свойств документа. Я могу прочитать метаданные файла, используя file-metadata , но он дает только основные свойства. Я хочу прочитать свойства, такие как Сводная информация об ограничениях документов (пожалуйста, проверьте прилагаемое изображение для справки. enter image description here

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вдохновленный предложением @ DietrichvonSeggern Я написал скрипт для небольших узлов.

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 ссылка на тег .


Слегка изменено:

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
}
0 голосов
/ 18 января 2019

Рассматривали ли вы использование exiftool? Вы должны интегрировать его в nodejs, но на самом деле он предоставляет более или менее все данные, которые вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...