2015-12-30 2 views
2

Я работаю с PDFKit, чтобы сгенерировать PDF-файл в браузере, а затем отправить данные blob этого PDF-файла на новую вкладку для загрузки пользователем. Мне очень нравится PDFKit ... это довольно пятно.PDFKit Не удается загрузить изображение в браузере

Однако, я бегу на вопрос, когда я пытаюсь и использовать функцию PDFDocument.image() для «нарисовать» файл изображения:

Uncaught TypeError: fs.readFileSync is not a function

Я довольно знакомы с узлом, и таким образом я узнал этот метод подпись сразу - браузер не имеет fs изначально! Я менее знаком с Browserify и решил использовать pre-built version of PDFKit, чтобы избежать интеграции другой зависимости, с которой я даже не знаком.

Мое единственное догадство заключается в том, что разработчики PDFKit не включили рабочий резерв для использования этой конкретной функции в браузере без Browserify - использовал бы Browserify даже дать мне доступ к модулю fs (опять же, никогда не использовал его)? Это мой единственный вариант здесь? Я пропустил какой-то конкретный шаг, необходимый для работы этой функции?

В настоящее время я в том числе следующих файлов JS, как зависимости для моего generate_pdf.js файла:

  • pdfkit.js
  • blob-stream.js

Есть ли модуль, который эмулирует fs, что я нужна? Я не вижу этого документально, но это был долгий день.

ответ

2

Ну, есть несколько библиотек (например, this или this), но я бы очень рекомендовал написать fs.readFileSync.

Поскольку вы, вероятно, получить доступ к файловой системе клиента из браузера в любом случае, используя некоторые существующие решения будет означать добавление уровня абстракции нет, и т.д.

Так, вероятно самым простым и самым простым решением было бы добавить

var fs = { 
    readFileSync: (path) => { 
    // magic 
    } 
} 

Почему вероятно? Ну ...

  1. Если есть обычаи многих fs функций, вы, очевидно, хотите сделать это с какой-то библиотеке

  2. синхронные запросы. Я предполагаю, что вы загружаете изображения с некоторого URL-адреса, поэтому вам нужно будет использовать синхронные запросы в реализации fs.readFileSync для достижения желаемого результата. Это не похоже на большое дело, но вы получите предупреждения в консоли.

P.S. извините, но есть высокая вероятность того, что вы столкнетесь с большим количеством проблем с этим, потому что гораздо проще распространять PDF-файлы на стороне сервера. Вы не переходите к бэкэнду? ;)

+0

Спасибо за предложение! Я не уверен, почему PDFKit использует 'readFileSync' для получения изображения с сервера (я не пытаюсь получить доступ к файловой системе клиента).Я не думаю, что буду катиться самостоятельно. Причина, по которой я делаю это на клиенте, заключается в том, что мне гораздо удобнее JavaScript, чем PHP, и это для сайта WordPress. Я думаю, что я попытаюсь сделать, это запустить простой сервер Node для обработки генерации PDF. –

+0

Ну, вы можете просто создать pdf-файл в процессе nodejs, вызванный с php, скажем, '' exec'' - нет необходимости настраивать сервер;) –

Смежные вопросы