Skip to main content

Einbetten von angehängten .pdf-Dokumenten in Bookstack

Die Wiki-Software Bookstack bietet nur die Funktion, .pdf-Dateien anzuhängen. Die folgende Anleitung zeigt, wie die .pdf-Dateien auch in die entsprechende Wiki-Seite eingebettet werden können.

Einmalige Vorarbeit:

  1. Sich als Administrator einloggen, in den Einstellungen den Punkt Personalisierung aufrufen und folgende Einstellung suchen: "Benutzerdefinierter HTML <head> Inhalt"

    image.png


  2. Folgendes Script in das vorgesehene Feld kopieren:

        <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.466/pdf.min.js"></script>
    <style>
    canvas[data-pdfurl] {
      background-color: lightgrey;
       width: 100%;
    }
    .page-content a {
     color: #39f;
    text-decoration: underline;
    }
    .pdf-wrapper {
    position: relative;
    height: 80vh;
    width: 100%;
    }
    .pdf-wrapper .download-link {
    position: absolute;
    top: -2em; 
    right: 0;
    z-index: 50;
    }
    .pdf-wrapper .pdf-scroller {
    height: 100%;
    overflow: auto;
    }
    </style>
    <script type="text/javascript">
    window.addEventListener('load', function () {
    var renderPdf=function(canvas) {
      var url = canvas.dataset.pdfurl;
      var pdf = null;
      // wrap canvas in div
      var wrapper = document.createElement('div');
      wrapper.className='pdf-wrapper';
      var scroller = document.createElement('div');
      scroller.className='pdf-scroller';
      wrapper.appendChild(scroller);
      canvas.parentNode.insertBefore(wrapper, canvas.nextSibling);
      scroller.insertBefore(canvas, null);
    
      var downloadLink  = document.createElement('a');
      downloadLink.href = url;
      downloadLink.className="download-link";
      downloadLink.innerText = 'Download PDF now ↓';
      wrapper.appendChild(downloadLink);
    
      var renderPage = function(page) {
        var scale = 1.5;
        var viewport = page.getViewport(scale);
        // Fetch canvas' 2d context
        var context = canvas.getContext('2d');
        // Set dimensions to Canvas
        canvas.height = viewport.height;
        canvas.width = viewport.width;
        canvas.style.maxWidth='100%';
        // Prepare object needed by render method
        var renderContext = {
          canvasContext: context,
          viewport: viewport
        };
        // Render PDF page
        page.render(renderContext);
        if (currentPage < pdf.numPages) {
          currentPage++;
          var newCanvas = document.createElement('canvas');
          scroller.insertBefore(newCanvas, canvas.nextSibling);
          scroller.insertBefore(document.createElement('hr'), canvas.nextSibling);
          canvas=newCanvas;
          pdf.getPage(currentPage).then(renderPage);
        }
      };
      var currentPage = 1;
      pdfjsLib.getDocument(url)
      .then(function(pdfLocal) {
        pdf = pdfLocal;
        return pdf.getPage(1);
      })
      .then(renderPage);
    }
    Array.prototype.forEach.call(
      document.querySelectorAll('canvas[data-pdfurl]'),
      renderPdf);
    });
    </script>

  3. Mit "Einstellungen speichern bestätigen"