PDF.jsのcmap設定

2022年3月30日水曜日

PDF.js

t f B! P L
 stackoverflowの記事を参考にPDF.jsを使ってウェブブラウザでpdfを表示すると、あるpdfが正常に表示されませんでした。
デベロッパーツールのコンソールには、次のようなワーニングが表示されています。

Warning: loadFont - translateFont failed: "Error: fetchBuiltInCMap: failed to fetch file "sscmaps/Adobe-Japan1-UCS2.bcmap" with "Not Found".".
このワーニングは、PDF.jsのCMAPのパスが正しく設定されていない場合に表示されるようです。PDF.jsはPrebuiltをダウンロードして次のように配置しています。

├── pdfjs/
│   ├── cmaps/ 
│   ├── locale/
│   ├── pdf.js 
│   ├── pdf.js.map
│   ├── pdf.worker.js
│   └── pdf.worker.js.map
└── index.html
この配置に合わせてpdfjsLib.getDocumentにCMAPを次のように設定します。cMapUrlに設定するパスは、pdfjs/cmaps/ではなくcmaps/が正解です。

<script src="pdfjs/pdf.js"> </script>

<script>

  const CMAP_URL = "cmaps/";
  const CMAP_PACKED = true;
        
  pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdfjs/pdf.worker.js';
  document.getElementById('file').onchange = function (event) {
    var file = event.target.files[0];
    var fileReader = new FileReader();
    fileReader.onload = function () {
      var typedarray = new Uint8Array(this.result);
      //const loadingTask = pdfjsLib.getDocument(typedarray);
      const loadingTask = pdfjsLib.getDocument({
        data: typedarray,
        cMapUrl: CMAP_URL,
        cMapPacked: CMAP_PACKED,
      });
      loadingTask.promise.then(pdf => {
        :
CMAPのパスを設定すると正常に日本語が表示されました。

このブログを検索

QooQ