Utilizzo della libreria pdf.js

di BennyBatt il
4 risposte

Salve a tutti.

Da buon neofita, sto cercando di utilizzare la libreria pdf.js per visualizzare dei documenti pdf in HTML.

Inizialmente, tramite un po' di studio, sono riuscito a farlo utilizzando la libreria minimizzata che segue:

<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.9.359/pdf.min.js"></script>

Poi, con il seguente codice ho letto il file pdf e lìho reso in un canvas (vi evito tutto il codice, perché è inutile):

        function renderPDF(pdfUrl) {
            var loadingTask = pdfjsLib.getDocument(pdfUrl);
            loadingTask.promise.then(
                function (pdf) {
                    pdf.getPage(1).then(function (page) {

eccetera.

L'operazione funzionava, ma in console trovavo il seguente Warning: "Deprecated API usage: No "GlobalWorkerOptions.workerSrc" specified".

Cercando, ho trovato un'alternativa più attuale.

Ho scaricato la libreria e inserito in una cartella i 2 file pdf.mjs e pdf.worker.mjs che richiamo a livello di modulo, così da applicare il metodo richiesto. 

Questo il codice (sempre semplificato):

Un primo SCRIPT per richiamare la libreria:

<script src="./pdf.mjs" type="module"></script>

e il codice precedente in un secondo SCRIPT modificato come segue:

    function renderPDF(pdfUrl) {
        pdfUrl.GlobalWorkerOptions.workerSrc = './pdf.worker.mjs';
        var loadingTask = pdfjsLib.getDocument(pdfUrl);
        loadingTask.promise.then(
            function (pdf) {
                pdf.getPage(2).then(function (page) {

Però, in questo caso mi subetra un errore, che non riesco proprio a sistemare, cioè mi viene evidenziato il seguente messaggio: "Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "". Strict MIME type checking is enforced for module scripts per HTML spec.".

Quindi, deduco che non viene riconosciuto il MIME .mjs.

Come lo risolvo? Qualcuna ha qualche idea? Nel web c'è solo confusione, oppure strane soluzioni che non riesco a capire.

4 Risposte

  • 02/04/2025 - BennyBatt ha scritto:

    Quindi, deduco che non viene riconosciuto il MIME .mjs.

    Più che "non viene riconosciuto", potrebbe essere il server che non restituisce il tipo MIME giusto.

    02/04/2025 - BennyBatt ha scritto:

    Come lo risolvo? Qualcuna ha qualche idea?

    Il tuo hosting su cosa si basa? PHP? ASP.NET?
    Hai la possibilità di modificarne la configurazione in qualche modo?

    Dovresti mappare l'estensione .mjs al tipo MIME corretto e atteso dalla pagina.

    In alternativa, potresti verificare se è disponibile una versione ".js", non esposta quindi come modulo.

    Sono le prime cose che mi sono venute in mente, non ho avuto molto tempo per approfondire... :)

  • Grazie della risposta Alka.

    Io sto usando XAMPP e carico il file in localhost.

    Il file in questione è un normale HTML dove ho inserito gli SCRIPT.

    Purtroppo non so bene come gestire le configurazioni del server (ma, serve??!!).

    Non credo esista una versione .js. della libreria. A meno che non sia prevista per i vecchi browsers (c'è un doppio link per il download nella pagina della libreria: https://mozilla.github.io/pdf.js/getting_started/#download ). Uso una delle ultime versioni di Chrome, quindi non credo sia quello il caso.

  • 02/04/2025 - BennyBatt ha scritto:

    Purtroppo non so bene come gestire le configurazioni del server (ma, serve??!!).

    Prova a cercare nella cartella di installazione il file mime.types, oppure aggiungi il tipo MIME nel file di configurazione di Apache (dovrebbe essere nella configurazione del mime_module).

  • Salve Alka.

    Allora, risolto aggiungendo MIME type in APACHE seguendo le indicazioni date in questa pagina: https://bannersky.com/faq/bsk-pdf-manager/how-to-add-mime-type-for-mjs-file/#:~:text=How%20to%20add%20MIME%2DType%20to%20Apache,Just%20add%20AddType%20text%2Fjavascript%20.

    Se a qualcuno potrà servire, è la strada corretta.

    Naturalmente, credo che sarà il caso di controllare che la gestione del MIME type .mjs sia possibile anche nel hosting di produzione. 

    Ti ringrazio molto per l'aiuto.

Devi accedere o registrarti per scrivere nel forum
4 risposte