PDF.JS:PDFViewer 类无法正确呈现页面

问题描述 投票:0回答:0

我需要用 Thymeleaf 中的 pdf.js 编写一个自己的 PDF-Viewer,它可以搜索文本并呈现引用。但是 pdfjsViewer 库中的类 PDFViewer 只呈现前两个页面而不会抛出错误。 我当前的版本是 3.2.144

我使用 pdfjsViewer 库创建了 pdf-viewer、pdf-find-controller 和 pdf-link-service 的实例。使用 pdfViewer.setDocument(pdfDocument) 方法时,它通常应该正确呈现页面。

<!DOCTYPE html>
<html lang="en" dir="ltr" mozdisallowselectionprint>
<head>
    <meta charset="utf-8">

    <title>PDF.js viewer</title>
    <meta charset="UTF-8">

    <link rel="resource" type="application/l10n" href="locale/locale.properties">
    <link rel="stylesheet" href="/assets/images/pdfjs-lib/web/pdf_viewer.css">

    <style>
        #viewer-container {

            position: absolute;
            top: 0;
            right: 0;
            bottom: 0;
            left: 500px;
        }
    </style>

</head>
<body>

<input type="text" id="search-box" placeholder="Search...">

<div id=" page-number"></div>

<div id="page-count"></div>

<div id="viewer-container">

    <div id="viewer"></div>
</div>


<script src="/assets/images/pdfjs-lib/build/pdf.js"></script>
<script src="/assets/images/pdfjs-lib/build/pdf.min.js"></script>
<script src="/assets/images/pdfjs-lib/build/pdf.worker.js"></script>
<script src="/assets/images/pdfjs-lib/build/pdf.sandbox.js"></script>
<script src="/assets/images/pdfjs-lib/web/pdf_viewer.js"></script>
<script>

    document.addEventListener('DOMContentLoaded', function() {
       // PDFViewerApplication.initialize();
        const pdfUrl = '/assets/images/Diplomarbeiten/test.pdf';
        const container = document.getElementById('viewer-container');
        var viewer = document.getElementById('viewer');

        //VERSION 3.2.146
        pdfjsLib.GlobalWorkerOptions.workerSrc = '/assets/images/pdfjs-lib/build/pdf.worker.js';

        const SEARCH_FOR = document.getElementById("search-box").value;
        const eventBus = new pdfjsViewer.EventBus();
        const SANDBOX_BUNDLE_SRC = "/assets/images/pdfjs-lib/build/pdf.sandbox.js";

        var pdflinkService = new pdfjsViewer.PDFLinkService({
            'eventBus': eventBus,
            'externalLinkEnabled': true,
            'externalLinkRel': 'nope',
            'externalLinkTarget': 2 // Blank
        });

        // pdfObj.linkService = linkService;

        pdfFindController = new pdfjsViewer.PDFFindController({

            eventBus: eventBus,
            linkService: pdflinkService,
        });


        // (Optionally) enable scripting support.
        const pdfScriptingManager = new pdfjsViewer.PDFScriptingManager({
            eventBus,
            sandboxBundleSrc: SANDBOX_BUNDLE_SRC,
        });

        var pdfViewer = new pdfjsViewer.PDFViewer(
            {
                'container': container,
                'enableScripting': true, // Block embeded scripts for security
                'enableWebGL': true,
                'eventBus': eventBus,
                'renderInteractiveForms': true, // Allow form fields to be editable
                'textLayerMode': 1,
                'findController': pdfFindController,
                'scriptingManager': pdfScriptingManager,
                'viewer': viewer,
            }
        );
        pdflinkService.setViewer(pdfViewer);

        pdfScriptingManager.setViewer(pdfViewer);

        pdfjsLib.getDocument(pdfUrl).promise.then(function (pdfDocument) {

        });

        eventBus.on("pagesinit", function () {
            // We can use pdfViewer now, e.g. let's change default scale.
            pdfViewer.currentScaleValue = "page-width";

            // We can try searching for things.
            if (SEARCH_FOR) {
                eventBus.dispatch("find", {type: "", query: SEARCH_FOR});
            }
        });

        // Loading document.
        const loadingTask = pdfjsLib.getDocument({
            url: pdfUrl,
            cMapUrl: '/assets/images/pdfjs-lib/cmaps/',
            cMapPacked: true,
            enableXfa: true,
        });
        (async function () {
            const pdfDocument = await loadingTask.promise;
            // Document loaded, specifying document for the viewer and
            // the (optional) linkService.
            pdfViewer.setDocument(pdfDocument);

            pdflinkService.setDocument(pdfDocument, null);
        })();

    });

</script>
</body>
</html>

javascript pdf thymeleaf pdf.js pdf-viewer
© www.soinside.com 2019 - 2024. All rights reserved.