Как распарсить pdf библиотекой pdfreader

Как можно открыть pdf файл, который находится на сервере? Никак не могу сделать это, нашел библиотеку pdfreader, но почему-то не хочет работать.

import { PdfReader } from "pdfreader";
 
new PdfReader().parseFileItems("https://site/file.pdf", (err, item) => {
  if (err) console.error("error:", err);
  else if (!item) console.warn("end of file");
  else if (item.text) console.log(item.text);
});
Error: Load Failed: https://site/file.pdf - Error: ENOENT: no such file or directory, stat 'https://site/file.pdf'
    at Object.error [as p2jerror] (eval at <anonymous> (file:///C:/Users/proto/OneDrive/Desktop/rosbilet/node_modules/pdf2json/lib/pdf.js:66:1), <anonymous>:195:9)
    at PDFParser.loadPDF (file:///C:/Users/proto/OneDrive/Desktop/rosbilet/node_modules/pdf2json/pdfparser.js:128:22)
    at PdfReader.parseFileItems (file:///C:/Users/proto/OneDrive/Desktop/rosbilet/node_modules/pdfreader/PdfReader.js:62:13)
    at file:///C:/Users/proto/OneDrive/Desktop/rosbilet/index.js:5:17
    at ModuleJob.run (node:internal/modules/esm/module_job:194:25)

Ответы (1 шт):

Автор решения: nörbörnën

Если ваш целевой файл не локальный, вам нужно скачать его и преобразовать в понятный для pdfreader формат:

// @ts-check
import { PdfReader } from 'pdfreader';

const TEST_SAMPLE_PDF =
  'https://raw.githubusercontent.com/adrienjoly/npm-pdfreader/master/test/sample.pdf';

const res = await fetch(TEST_SAMPLE_PDF);
if (!res.ok) {
  console.error(`
    status: ${res.status}, ${res.statusText}
    body: ${await res.text().catch(() => '...fail res.text()...')}
  `);
  process.exit(1);
}

const buf = await res.arrayBuffer();
new PdfReader(null)
  .parseBuffer(
    Buffer.from(buf),
    (err, item) => {
      if (err) console.error("error:", err);
      else if (!item) console.warn("end of buffer");
      else if (item.text) console.log(item.text);
    }
  );
Warning: Setting up fake worker.
Hello "world"
Value:
4
c1
c2
c3
1
2.3
hello
world
Values:
1
2
3
end of buffer

node v21.6.1

→ Ссылка