Вирішуємо проблему модуля PDF в Drupal 9
Тож сьогоднішня проблема - на сайті з Drupal 9 поставили модуль для генерації зображення з pdf - PDF, котрий використовує бібіліотеку pdf.js.
Після встановлення модуля, бібліотеки та наче налаштування полей матеріала, отримуємо перші помилки, через те, що за замовченням модуль очікує побачити в бібліотеці файли розширення .js, але там є тільки .mjs.
Взагалі то розробники вже зробили патч, котрий начебто вирішив це.
diff --git a/pdf.libraries.yml b/pdf.libraries.yml
index 1054e6c..f5239e1 100755
--- a/pdf.libraries.yml
+++ b/pdf.libraries.yml
@@ -5,7 +5,7 @@ mozilla.pdf.js:
url: https://raw.githubusercontent.com/mozilla/pdf.js/master/LICENSE
gpl-compatible: true
js:
- /libraries/pdf.js/build/pdf.js: {}
+ /libraries/pdf.js/build/pdf.mjs: { attributes: { type: module } }
#//mozilla.github.io/pdf.js/build/pdf.js: { type: external, minified: false }
drupal.pdf:
dependencies:
diff --git a/src/Plugin/Field/FieldFormatter/PdfPages.php b/src/Plugin/Field/FieldFormatter/PdfPages.php
index 008f051..f894e40 100755
--- a/src/Plugin/Field/FieldFormatter/PdfPages.php
+++ b/src/Plugin/Field/FieldFormatter/PdfPages.php
@@ -72,7 +72,7 @@ class PdfPages extends FormatterBase {
}
}
$elements['#attached']['library'][] = 'pdf/drupal.pdf';
- $worker = \Drupal::service('file_url_generator')->generateAbsoluteString(base_path() . 'libraries/pdf.js/build/pdf.worker.js');
+ $worker = \Drupal::service('file_url_generator')->generateAbsoluteString(base_path() . 'libraries/pdf.js/build/pdf.worker.mjs');
$elements['#attached']['drupalSettings'] = [
'pdf' => [
'workerSrc' => $worker,
diff --git a/src/Plugin/Field/FieldFormatter/PdfThumbnail.php b/src/Plugin/Field/FieldFormatter/PdfThumbnail.php
index 92bdbd3..23ce09d 100755
--- a/src/Plugin/Field/FieldFormatter/PdfThumbnail.php
+++ b/src/Plugin/Field/FieldFormatter/PdfThumbnail.php
@@ -92,7 +92,7 @@ class PdfThumbnail extends FormatterBase {
}
}
$elements['#attached']['library'][] = 'pdf/drupal.pdf';
- $worker = \Drupal::service('file_url_generator')->generateAbsoluteString(base_path() . 'libraries/pdf.js/build/pdf.worker.js');
+ $worker = \Drupal::service('file_url_generator')->generateAbsoluteString(base_path() . 'libraries/pdf.js/build/pdf.worker.mjs');
$elements['#attached']['drupalSettings'] = [
'pdf' => [
'workerSrc' => $worker,
Але після додавання патчу ми скоріш за все все одно побачимо помилку на сторінці матеріалу, тим паче якщо в нас vps сервер, котрий ми ще й самі налаштовували. Всіх варіантів не передбачиш та помилки в браузері будуть нам казати, що файл розширеня .mjs не обробляється належним чином.
Для вирішення цієї проблеми в файл .htaccess достатньо додати строку
AddType application/javascript .mjs
В разі якщо в нас є тільки Nginx, в файл конфігурації додаємо
types {
application/javascript mjs;
}